20

Oracleデータベースでは、次の違いは何ですか。

  • ユーザー()
  • sys_context('USERENV'、'CURRENT_USER')
  • sys_context('USERENV'、'SESSION_USER')

これらは、「現在のユーザー」が何であれ、関連する可能性のある値ですか?

  • sys_context('USERENV'、'CURRENT_SCHEMA')
  • sys_context('USERENV'、'AUTHENTICATED_IDENTITY')

特に、変更できるもの、変更できるもの、値を変更できないもの、接続タイプに基づいて値が異なるもの、ログインに使用されるスキーマが常にあるものに関心があります。データベース。

私のテストのほとんどでは、値は常に同じです。唯一の例外は、以下を実行して「CURRENT_SCHEMA」を変更する場合です。

alter session set current_schema=<SCHEMA>

次の手順を実行すると、エラーが発生します。

alter session set current_user=<USER> --even as sys/system, which is good I suppose

したがって、このすべての周りにある種のセキュリティ/ルールがあります。ただし、SESSION_USERとCURRENT_USERがあるのには何らかの理由があるはずです。また、user()はsys_context('USERENV'、'CURRENT_USER')へのショートカットである可能性があると思いますが、この問題に関するドキュメントは見つかりませんでした。

4

5 に答える 5

17

マニュアルから: http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions184.htm#SQLRF51825

現在の使用者

権限が現在有効なデータベース ユーザーの名前。これは、アクティブな定義者権限オブジェクトの所有者を反映するために、セッション中に変更される場合があります。アクティブな定義者権限オブジェクトがない場合、CURRENT_USER は SESSION_USER と同じ値を返します。ビュー定義の本文で直接使用すると、ビューを使用しているカーソルを実行しているユーザーが返されます。カーソルで使用されるビューを定義者の権利として尊重しません。

SESSION_USER

ログオン時のデータベース ユーザーの名前。エンタープライズ ユーザーの場合、スキーマを返します。その他のユーザーの場合は、データベース ユーザー名を返します。この値は、セッション中ずっと同じままです。

そのため、特に CURRENT_USER がストアド プロシージャまたは関数で使用されている場合、SESSION_USER と CURRENT_USER に違いがあります。

ただし、「エンタープライズ ユーザー」という用語の意味がわからないことは認めざるを得ません。

ところで:3番目のものがあります:

SESSION_USERID

ログオン時のデータベース ユーザーの識別子。

于 2012-06-12T21:30:41.283 に答える
3

sys_context('USERENV', 'CURRENT_SCHEMA')- 現在使用されていて、すでにわかっているスキーマは、次のコマンドで変更できますalter session

sys_context('USERENV', 'SESSION_USER')- セッションの作成時に認証に使用され、変更できないユーザー

sys_context('USERENV', 'CURRENT_USER')-非推奨の「session_user」とほぼ同じです(少なくとも10gのドキュメントによると)
(@a_horse_with_no_nameの回答と彼が11gのドキュメントに与えた参照に従って編集されました)

sys_context('USERENV', 'AUTHENTICATED_IDENTITY')- 認証に使用される ID は、「AUTHENTICATION_METHOD」に依存します。ドキュメント
から:

  • Kerberos 認証されたエンタープライズ ユーザー: kerberos プリンシパル名
  • Kerberos 認証済み外部ユーザー: kerberos プリンシパル名。スキーマ名と同じ
  • SSL 認証されたエンタープライズ ユーザー: ユーザーの PKI 証明書の DN
  • SSL 認証された外部ユーザー: ユーザーの PKI 証明書の DN
  • パスワード認証されたエンタープライズ ユーザー: ニックネーム。ログイン名と同じ
  • パスワード認証データベース ユーザー: データベース ユーザー名。スキーマ名と同じ
  • OS 認証済み外部ユーザー: 外部オペレーティング システムのユーザー名
  • Radius/DCE で認証された外部ユーザー: スキーマ名
  • Proxy with DN : クライアントのOracle Internet Directory DN
  • 証明書付きプロキシ: クライアントの証明書 DN
  • ユーザー名を持つプロキシ: クライアントがローカル データベース ユーザーの場合はデータベース ユーザー名。クライアントがエンタープライズ ユーザーの場合のニックネーム。
  • パスワード・ファイルを使用したSYSDBA/SYSOPER: ログイン名
  • OS認証を使用したSYSDBA/SYSOPER: オペレーティング・システムのユーザー名

user pseudo column-よくわかりませんが、ドキュメントによると、似ていると思いますCURRENT_SCHEMAが、どうやら似ているようですCURRENT_USER

于 2012-06-12T21:01:39.440 に答える