2013-02-20 233 views
0

我们有我们的应用程序的两个副本终端服务器防止应用程序:真人版和测试版。访问数据库

这些是用户桌面上的2个图标。现在,当您启动应用程序时,请输入应用程序连接到的oracle数据库的名称。

我们要阻止用户访问生产数据库,当他们使用测试图标,并防止用户访问该测试环境时,他们使用PROD图标。

很遗憾,我们无法通过应用程序做到这一点,我们不想下去获得由供应商修改应用程序的途径。应用程序使用单个tnsnames.ora文件连接到测试版本和产品版本的数据库,因此我们无法更改此设置(除非有办法使用倍数?)。

我想我们可以有一个本地防火墙会阻止访问实时的服务器测试应用(只是阻止连接),但此刻,他们都在同一台服务器上!

所以,任何人都可以想办法防止某个应用程序访问Oracle数据库?应用程序EXE具有相同的名称,但它是从不同的路径运行,具体取决于它是测试版还是prod版本。

+0

你能阻止用户输入数据库的名称吗?即,对数据库的名称进行硬编码,以便测试应用程序自动连接到正确的数据库。 – Rene 2013-02-20 07:13:26

+0

您可以创建'.bat'文件来设置'TNS_ADMIN'环境变量,然后启动真正的应用程序;并且终端服务器图标被更改为指向批处理文件?那么每个人都可以拥有自己的带有单个条目的'tnsnames.ora'? (我假设应用程序不需要命令行开关自动设置Oracle别名)。 – 2013-02-20 07:47:59

+0

不能硬编码任何东西 - 不能改变应用程序。 @ Alex-不会设置tns_admin会影响服务器上的现有会话吗? – Lock 2013-02-20 10:43:19

回答

1

既然你已经在终端服务器上控制的环境中,一个很简单的选择是包装在迫使它使用受限tnsnames.ora一个批处理文件的应用程序。

创建两个目录,例如test_tns_adminlive_tns_admin。将tnsnames.ora的副本放在每个目录中,但对其进行编辑,使其每个目标数据库仅具有TNS别名。

创建两个批处理文件,例如, live.battest.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,但取决于您想如何管理它,以及是否让他们都以同样的方式工作会更清楚。

+0

您只需将@lock的最新评论添加为答案苍白! – 2013-02-21 21:42:44

+0

@ M.Heydari - 不,请看这个问题本身的评论历史;我建议它和Lock在您对答案添加评论之前尝试了它。我们有同样的想法,但我没有复制你或根据你的评论根据我的回答。 – 2013-02-21 22:06:27

1

有一个叫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,则他们仍然英寸

+0

我正在考虑这个问题,但应用程序名称与live和prod相同。我可以更改exe名称,但启动程序会启动名为menu.exe的exe文件,所以我无法在两个文件夹之间进行更改。 – Lock 2013-02-20 10:40:53

+0

可能有一种疯狂的方式:您可以在不同位置使用两个版本的TNS.ora文件一个用于开发,一个用于测试),那么你必须为每个.Exe编写一个批处理文件,在Bach文件中首先你将复制并替换.Ora文件,接下来你将调用.exe,你必须替换这些快捷方式2个新的Bach文件将在您的桌面上显示旧的快捷方式... – 2013-02-20 18:43:24