「プロキシユーザー」/「接続」を介してOraleデータベースの特定のスキーマへのアクセスが許可されています。
SQL Developer/TOADでは、ユーザー名を "MyUser [SomeSchema]"として指定し、ログイン後、SomeSchemaのすべてのテーブルなどをクエリできるようになりました。 「MyUser」だけを使用してログインすることもできますが、SomeSchema内の任意のテーブルをクエリすることはできません(schema.table構文を使用していても。)
つまり、私の質問は:接続文字列を使用してコードから接続する場合(.NETでODP.NETを使用)、MyUser [SomeSchema]アプローチを「複製」するにはどうすればよいですか?
更新1
Toadで次のSQLを実行すると、実際に必要な結果が得られることがわかりました。
connect MyUser[SomeSchema]/{password for MyUser};
現在のスキーマがSomeSchemaに変更され、そのテーブルをクエリできます。
問題は、これがODP.NETを介して直接達成できるかどうかです。
更新2
最後に、接続文字列を組み合わせる方法を見つけました。以下の自分の答えを見てください。
研究
私はかなりググってみました、そして運なしで以下を試しました。
最後に、接続文字列を介してプロキシユーザーのログインを表す方法を見つけました。
MyUser password
Toad経由でログインした後、 https://www.devart.com/dotconnect/Oracle/docs/ProxyUserConnection.html にアクセスし、以下のSQLクエリを実行した後、最終的にダイムはドロップしました。ここで、誤解していたこと、MyUserが実際にはプロキシユーザーであることは明らかでした...
SELECT SYS_CONTEXT('USERENV', 'PROXY_USER'), SYS_CONTEXT('USERENV', 'SESSION_USER') FROM dual
次の例は、ODP.NETプロキシ認証の使用を示しています。
/* Log on as DBA (SYS or SYSTEM) that has CREATE USER privilege.
Create a proxy user and modified scott to allow proxy connection.
create user appserver identified by eagle;
grant connect, resource to appserver;
alter user scott grant connect through appserver;
*/
// C#
using System;
using Oracle.DataAccess.Client;
class ProxyAuthenticationSample
{
static void Main()
{
OracleConnection con = new OracleConnection();
// Connecting using proxy authentication
con.ConnectionString = "User Id=scott;Password=tiger;" +
"Data Source=Oracle;Proxy User Id=appserver;Proxy Password=eagle; ";
con.Open();
Console.WriteLine("Connected to Oracle" + con.ServerVersion);
// Close and Dispose OracleConnection object
con.Close();
con.Dispose();
Console.WriteLine("Disconnected");
}
}
上記はPassword
属性なしで動作するはずです。プロキシ特権の要点は、スキーマのパスワードを開示せずにログインできるようにすることです。