認証プラグインを使用したMySQLサーバーへの認証が発生すると,接続中の(外部)ユーザーを権限チェックのために別のユーザーとして処理するようにプラグインから要求されることがあります。これにより,外部ユ,ザ,を2番目のユ,ザ,のプロキシにすることができます。2番目のユザの権限を持ことができます。言い換えると,外部ユ,ザ,は「プロキシユザ」(偽装できるユーザーまたは別のユーザーと呼ばれるようになるユーザー)であり,2番目のユーザーは「プロキシ対象ユザ」(プロキシユザが実行できるアデンティティを持ユザ)です。
このセクションでは,プロキシユザ機能の動作にいて説明します。認証プラグ化学键ンに関する一般的な情報に化学键いては,セクション6.3.7“プラガブル認証”を参照してください。プロキシユザがサポートされている独自の認証プラグインを作成することに関心がある場合は、セクション24.2.4.9.4 "認証プラグ”を参照してください。
プロキシ処理を発生させるには,次の条件を満たす必要があります。
接続中のクライアントがプロキシユーザーとして処理されるときに,プラグインはプロキシ対象ユーザーの名前を示すために,別の名前を返す必要があります。
プロキシユザのアカウントがプラグンで認証されるように設定する必要があります。
创建用户
または格兰特
ステトメントを使用して,アカウントをプラグンに関連付けます。プロキシユ,ザ,のアカウントは,プロキシ対象アカウントの
代理
権限を持必要があります。これを行うには,格兰特
ステ,トメントを使用します。
次のような定義にいて検討します。
CREATE USER 'empl_external'@'localhost' IDENTIFIED WITH auth_plugin AS 'auth_string';CREATE USER 'employee'@'localhost'授权代理'employee'@'localhost'到'empl_external'@'localhost';
クラ▪▪アントがロ▪▪カルホストからempl_external
として接続すると,MySQLはauth_plugin
を使用して認証を実行します。auth_plugin
が(“auth_string”
の内容に基づいて,おそらく一部の外部認証システムを参照することで)サ,バ,に员工
というユ,ザ,名を返す場合は,このクラ,员工
ロカルユザとして処理するように求めるサバへのリクエストとして機能します。
この場合,empl_external
はプロキシユザ,员工
はプロキシ対象ユ,ザ,です。
サ,バ,はempl_external
が员工
に対する代理
権限を持っているかどうかをチェックすることで,empl_external
ユ,ザ,に対して员工
のプロキシ認証を実行できることを確認します。(この権限が付与されていない場合は,エラーが発生します)。
プロキシ処理が発生したときに,用户()
およびCURRENT_USER ()
関数を使用すると,接続中のユーザーと現在のセッション中に権限が適用されるアカウントとの相違点を確認できます。先ほど説明した例では,これらの関数は次の値を返します。
mysql> SELECT USER(), CURRENT_USER();+-------------------------+--------------------+ | 用户()| CURRENT_USER () | +-------------------------+--------------------+ | empl_external@localhost | employee@localhost | +-------------------------+--------------------+
認証プラグ@ @ンの名前を指定する认同
句のあとに,ユザの接続時にサバがプラグンに渡す文字列を指定する作为
句が続く場合があります。作为
句が必要であるかどうかは,各プラグ。必要な場合,認証文字列の形式は,プラグesc escンを使用する目的によって異なります。許可される認証文字列の値にいては,特定のプラグンに関するドキュメントを参照してください。
プロキシ権限の付与
外部ユ,ザ,が別のユ,ザ,として接続し,その権限を持,ことができるようにするには,特別な代理
権限が必要です。この権限を付与するには,格兰特
ステ,トメントを使用します。例:
授权代理'proxied_user到proxy_user”;
proxy_user
は,接続時に外部で認証された有効なMySQLユ,ザ,を表している必要があります。そうでない場合は,接続の試行に失敗します。proxied_user
は,接続時にロ,カルで認証された有効なユ,ザ,を表している必要があります。そうでない場合は,接続の試行に失敗します。
対応する撤销
構文は次のとおりです。
撤销代理'proxied_user“来自”proxy_user”;
MySQL格兰特
および撤销
構文の拡張機能は,通常どおりに動作します。例:
授权代理'a'到'b', 'c', 'd';授权代理'a'到'd',由…授权代理'a'到'd'与授权选项;授权代理'a'到" @ ";撤销代理'a'从'b', 'c', 'd';
前述の例では,“@”
はデフォルトのプロキシユ,ザ,であり,「任意のユザ」を意味します。デフォルトのプロキシユ、ザ、に、いては、このセクションの後半で説明します。
次のような場合に,代理
権限を付与できます。
自分で
proxied_user
による:アカウント名のユ,ザ,名とホスト名の両方の部分で,用户()
の値がCURRENT_USER ()
およびproxied_user
と完全に一致する必要があります。proxied_user
に対する授权代理…有授权选项
を持ユザによる。
MySQLのaapl . exeンスト根
アカウントは,“@”
(まり,)代理…有授权选项
権限を持っています。これにより,根
はプロキシユーザーを設定したり,プロキシユーザーを設定するための権限をほかのアカウントに委任したりできます。たとえば,根
は次の操作を実行できます。
创建用户“admin”@“localhost”授权代理上“@”到“管理员”@“本地主机”与授权选项;
この時点で,管理
ユ,ザ,は特定のすべての授权代理
マッピングを管理できます。たとえば,管理
は次の操作を実行できます。
授权代理莎莉给乔;
デフォルトのプロキシユザ
一部またはすべてのユ,ザ,が特定の外部プラグ,「空白の」MySQLユーザーを作成し,そのプラグインを使用して認証するように設定し,(空白のユーザーとは異なる場合に)プラグインが認証された実際のユーザー名を返すことができるようにします。たとえば,ldap認証を実装するa ldap_auth
という名前の仮のプラグ@ @ンが存在すると仮定します。
创建id为“O=Oracle, OU=MySQL”的用户;CREATE USER 'developer'@'localhost'CREATE USER 'manager'@'localhost'GRANT PROXY ON 'manager'@'localhost' TO " @ ";GRANT PROXY ON 'developer'@'localhost' TO " @ ";
ここで,クラ。
Mysql——user=myuser——password='myuser_pass'…
サバでは,MySQLユザとして定義されたmyuser
が見かりません。ただし,クラアントのユザ名およびホスト名と一致する空白のユザアカウント(“@”
)があるため、サ、バ、はそのアカウントと照合してクラ、アントを認証します。サ,バ,はa ldap_auth
を呼び出して,それをユ,ザ,名とパスワ,ドとしてmyuser
およびmyuser_pass
に渡します。
a ldap_auth
プラグ电子邮箱ンによって,myuser_pass
がmyuser
の正しいパスワードでないことがLDAPディレクトリで検出された場合は,認証に失敗し,サーバーは接続を拒否します。
パスワ,ドが正しく,a ldap_auth
によってmyuser
が開発者であることが検出された場合は,MySQLサ,バ,にmyuser
ではなく,开发人员
というユ,ザ,名が返されます。サ,バ,は,(実行するための代理
権限を持っているため)“@”
が开发人员
として認証できることを確認し,接続を受け入れます。セッションは,开发人员
の権限を持っているmyuser
で続行されます。(これらの権限は,dbaが格兰特
ステ,トメントを使用して設定するべきですが,表示されません。)用户()
およびCURRENT_USER ()
関数は,次の値を返します。
mysql> SELECT USER(), CURRENT_USER();+------------------+---------------------+ | 用户()| CURRENT_USER () | +------------------+---------------------+ | myuser@localhost | developer@localhost | +------------------+---------------------+
代わりに,プラグmyuser
がマネジャであることがldapディレクトリで検出された場合は,ユザ名として经理
が返され,セッションは经理
の権限を持myuser
で続行されます。
mysql> SELECT USER(), CURRENT_USER();+------------------+-------------------+ | 用户()| CURRENT_USER () | +------------------+-------------------+ | myuser@localhost | manager@localhost | +------------------+-------------------+
単純にするために,外部認証はマルチレベルで実行できません。前述の例では,开发人员
の証明書も,经理
の証明書も考慮されません。ただし,クラ开发人员
または经理
アカウントと照合して直接認証を試みる場合は,引き続き使用されます(そのため,これらのアカウントにはパスワードを割り当てられるはずです)。
デフォルトのプロキシアカウントは,任意のホストと一致する”
をホスト部分で使用します。デフォルトのプロキシユ,ザ,を設定する場合は,ホスト部分で“%”
を含むアカウントもチェックするように注意してください。その理由は,これらのアカウントは任意のホストにも一致しますが,サーバー内部でアカウント行をソートする際に使用されるルールによって,”
よりも優先されるためです(セクション6.2.4“アクセス制御,ステ,ジ1:接続の検証”を参照してください)。
MySQLのesc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc esc
创建用户“@”创建用户" @'%' IDENTIFIED BY 'some_password';
1番目のアカウントの目的は,それ以外の場合は,より具体的なアカウントと一致しないユーザーの接続を認証する際に使用されるデフォルトのプロキシユーザーとして機能することです。2番目のアカウントは,たとえば,匿名ユーザーとして独自のアカウントを持っていないユーザーを有効にするために,作成されることがあります。
ただし,この構成では,一致のル,ルによって“@”
よりも先に“@‘%’
がソ,トされるため,1番目のアカウントは使用されません。より具体的などのアカウントにも一致しないアカウントの場合,サ,バ,は“@”
ではなく,“@‘%’
と照合して認証を試みます。
デフォルトのプロキシユーザーを作成する場合は,デフォルトのプロキシユーザーよりも優先されるために,そのユーザーが目的どおりに動作することを妨げるその他の既存の「任意のユ,ザ,に一致する」アカウントがないかどうかチェックします。このようなアカウントをすべて削除する必要がある場合もあります。
プロキシユ,ザ,のシステム変数
次の2。
proxy_user
:プロキシ処理が使用されていない場合,この値は零
です。それ以外の場合は,プロキシユ,ザ,のアカウントを示します。たとえば,クライアントがデフォルトのプロキシアカウントを使用して認証する場合、この変数は次のように設定されます。mysql> SELECT @@proxy_user+--------------+ | @@ proxy_user | +--------------+ | ''@'' | +--------------+
external_user
:認証プラグンは外部ユザを使用して,MySQLサバへの認証を行うことがあります。たとえば,Windows のネイティブ認証を使用するときは、Windows の API を使用して認証するプラグインに、ログイン ID を渡す必要がありません。ただし、認証には引き続き Windows ユーザー ID が使用されます。このプラグインは、読み取り専用のセッション変数external_user
を使用して,この外部ユーザーID(または最初の512 utf - 8バイト)をサーバーに返すことがあります。プラグesc escンがこの変数を設定しない場合,その値は零
です。