Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已编译的python可执行文件访问被阻止,无法访问Oracle数据库_Python_Python 3.x_Oracle_Oracle11g_Cx Oracle - Fatal编程技术网

已编译的python可执行文件访问被阻止,无法访问Oracle数据库

已编译的python可执行文件访问被阻止,无法访问Oracle数据库,python,python-3.x,oracle,oracle11g,cx-oracle,Python,Python 3.x,Oracle,Oracle11g,Cx Oracle,我有一个脚本(my_script.py),它通过cx_Oracle以典型的登录过程访问Oracle数据库 def make_connect(**creds): dsn_str = cx_Oracle.makedsn(host, port, sid) return cx_Oracle.connect(un, pw, dsn_str) 当脚本从IDE运行时,通过此方法访问数据库没有问题,但一旦我将其打包到可执行文件中(使用PyInstaller,尽管我认为这并不重要),就会出现以下

我有一个脚本(my_script.py),它通过cx_Oracle以典型的登录过程访问Oracle数据库

def make_connect(**creds):
    dsn_str = cx_Oracle.makedsn(host, port, sid)
    return cx_Oracle.connect(un, pw, dsn_str)
当脚本从IDE运行时,通过此方法访问数据库没有问题,但一旦我将其打包到可执行文件中(使用PyInstaller,尽管我认为这并不重要),就会出现以下错误:

ORA-20045:登录被阻止

我相信这是因为访问数据库的可执行文件不是运行代码的python.exe,而是my_script.exe。如果我将我的_script.exe更改为python.exe,代码将按预期工作,这意味着我相信python.exe会被数据库列入白名单以供访问

我对哪个特定的系统变量或环境变量向Oracle数据库声明其自身以进行访问知之甚少,但我已尝试将sys.executable更改为python.exe,或将sys.argv[0]更改为python.exe,但我认为我可能需要更改更深层次的内容(如果我可以更改任何内容以获得访问权限的话)


任何建议都会大有裨益。exe将位于对数据库具有域访问权限的系统上,但由于只有python.exe被列入白名单,因此其访问将被拒绝

ORA-20000到ORA-21299范围内的Oracle异常是通过调用
raise\u application\u error
引发的一般用户定义异常。您可能有一个登录触发器或类似的东西阻止您连接。请尝试运行此查询以查找生成此错误的代码:
select*from all_source where text(如“%-20045%”
请DBA更改触发器以检查启动连接的驱动程序名,而不是程序名。这将(非常)稍微更安全,但对用户来说不那么烦人:
选择唯一的sid,客户机驱动程序从v$session\u connect\u info按sid排序客户机驱动程序列的事实标准是“名称:版本”。注意,旧版本的DB只会显示驱动程序实际设置的前9个左右的字符,因此当您使用Oracle DB 11时,可能看不到该版本。所谓“稍微更安全”,我的意思是“稍微不那么不安全”,因为任何人都可以伪造二进制名称(正如您所做的)或驱动程序名称。