0

Tomcat7 と SQL Server 2012 を使用しています。

SQL Server で 2 つのデータベースを実行しています。1 つは と呼ばれ、もう 1 つはmydb1と呼ばれmydb2ます。両方のデータベースは実質的に同一ですが、後者はテストに使用されます。

ここにweb.xml接続文字列があります

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/mydb1" type="javax.sql.DataSource" auth="Container"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" initialSize="30"
            maxActive="100"
        url="jdbc:sqlserver://localhost:1433;database=mydb1;integratedSecurity=true;"
            />

<Resource name="jdbc/mydb2" type="javax.sql.DataSource" auth="Container"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" initialSize="30"
            maxActive="100"
        url="jdbc:sqlserver://localhost:1433;database=mydb2;integratedSecurity=true;"
            />

私は IntegratedSecurity に接続しているので、最初の接続が 2 番目のデータベースを参照することを制限する方法はありますか。その逆も同様です。

つまり、最初の接続で接続するときに、コードSELECT * from mydb2.USERSが実行されないようにすることはできますか? 同様に、2 番目の接続で接続するときに、コードSELECT * from mydb1.USERSが実行されないようにすることはできますか?

4

1 に答える 1

1

安全: いいえ。SSPI (つまり、「Windows 認証」) で認証できるのは、接続しているプロセスの ID だけです。2 つの接続が同じプロセスから接続されている場合、それらは区別できません。それらが区別できない場合、GRANT/DENY/REVOKE は使用できません。

セキュリティで保護されていないものを探している場合 (たとえば、間違ったデータベースを誤って使用するのを防ぐなど)、信頼できるAPP_NAME(). 安全ではないことに重点を置き、app_name は接続文字列の単なる設定であり、誰でもスプーフィングできます。

テストと本番のデータベース ホストを共有するのは、なんとなく珍しいことです (テストの実行は本番の結果のタイミングに影響しますか? )

于 2013-06-05T15:58:47.353 に答える