访问数据库
我们有我们的应用程序的两个副本终端服务器防止应用程序:真人版和测试版。访问数据库
这些是用户桌面上的2个图标。现在,当您启动应用程序时,请输入应用程序连接到的oracle数据库的名称。
我们要阻止用户访问生产数据库,当他们使用测试图标,并防止用户访问该测试环境时,他们使用PROD图标。
很遗憾,我们无法通过应用程序做到这一点,我们不想下去获得由供应商修改应用程序的途径。应用程序使用单个tnsnames.ora文件连接到测试版本和产品版本的数据库,因此我们无法更改此设置(除非有办法使用倍数?)。
我想我们可以有一个本地防火墙会阻止访问实时的服务器测试应用(只是阻止连接),但此刻,他们都在同一台服务器上!
所以,任何人都可以想办法防止某个应用程序访问Oracle数据库?应用程序EXE具有相同的名称,但它是从不同的路径运行,具体取决于它是测试版还是prod版本。
既然你已经在终端服务器上控制的环境中,一个很简单的选择是包装在迫使它使用受限tnsnames.ora
一个批处理文件的应用程序。
创建两个目录,例如test_tns_admin
和live_tns_admin
。将tnsnames.ora
的副本放在每个目录中,但对其进行编辑,使其每个目标数据库仅具有TNS别名。
创建两个批处理文件,例如, live.bat
和test.bat
。在每个中,将TNS_ADMIN
管理变量设置为指向适当的目录,然后启动实际应用程序。所以test.bat
可能看起来像:
::Batch wrapper for the TEST application
@set TNS_ADMIN="\path\to\test_tns_admin"
@"\path\to\real\application.exe"
...和live.bat
是相同的,但指向其他目录。您可以将快捷方式放在桌面上的批处理文件中,而不是真正的应用程序中。当其中一个运行并且应用程序启动时,TNS_ADMIN
将意味着它将加载减少tns_names.ora
,因此只有TEST
TNS别名将被识别。终端服务器或数据库上的其他内容都不受影响。
你甚至不需要两个新的tnsnames.ora
文件;您可以从现有的系统范围中删除TEST
别名,并将实时应用程序单独保留,只将测试启动程序替换为批处理文件 - 这可能更好,因为没有触及live,但取决于您想如何管理它,以及是否让他们都以同样的方式工作会更清楚。
您只需将@lock的最新评论添加为答案苍白! – 2013-02-21 21:42:44
@ M.Heydari - 不,请看这个问题本身的评论历史;我建议它和Lock在您对答案添加评论之前尝试了它。我们有同样的想法,但我没有复制你或根据你的评论根据我的回答。 – 2013-02-21 22:06:27
有一个叫V $ SESSION
和查询波纹管视图显示任何会话信息
select username,program
from v$session
您可能对上市受限(或允许)程序名
表
CREATE TABLE RESTRICTED_PROGRAMS(
PROGRAM_NAME VARCHAR2(64))
INSERT INTO RESTRICTED_PROGRAMS VALUES ('TEST.exe');
COMMIT;
您可以使用脚本bel低创建后LOGON触发器
CREATE OR REPLACE TRIGGER logon_audit
AFTER LOGON ON database
DECLARE
v_program VARCHAR2(100);
BEGIN
SELECT program into v_program;
FROM v$session
WHERE audsid = userenv('sessionid');
for x in (SELECT * FROM RESTRICTED_PROGRAMS) loop
IF upper(v_program) == upper(x.PROGRAM_NAME) THEN
RAISE_APPLICATION_ERROR(-20001,
'You are not allowed to login using ' ||
v_program);
end if;
end loop;
END;
如果用户可以通过应用程序X.exe连接到你的数据库,然后如果他们重新命名Y.exe到X,则他们仍然英寸
我正在考虑这个问题,但应用程序名称与live和prod相同。我可以更改exe名称,但启动程序会启动名为menu.exe的exe文件,所以我无法在两个文件夹之间进行更改。 – Lock 2013-02-20 10:40:53
可能有一种疯狂的方式:您可以在不同位置使用两个版本的TNS.ora文件一个用于开发,一个用于测试),那么你必须为每个.Exe编写一个批处理文件,在Bach文件中首先你将复制并替换.Ora文件,接下来你将调用.exe,你必须替换这些快捷方式2个新的Bach文件将在您的桌面上显示旧的快捷方式... – 2013-02-20 18:43:24
你能阻止用户输入数据库的名称吗?即,对数据库的名称进行硬编码,以便测试应用程序自动连接到正确的数据库。 – Rene 2013-02-20 07:13:26
您可以创建'.bat'文件来设置'TNS_ADMIN'环境变量,然后启动真正的应用程序;并且终端服务器图标被更改为指向批处理文件?那么每个人都可以拥有自己的带有单个条目的'tnsnames.ora'? (我假设应用程序不需要命令行开关自动设置Oracle别名)。 – 2013-02-20 07:47:59
不能硬编码任何东西 - 不能改变应用程序。 @ Alex-不会设置tns_admin会影响服务器上的现有会话吗? – Lock 2013-02-20 10:43:19