10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


MySQL 5.6リファレンスマニュアル/.../ SQLベスのMySQLアカウントアクティビティの監査

6.3.13 SQLベスのMySQLアカウントアクティビティの監査

アプリケーションは次のガイドラインを使用することで,データベースアクティビティーをMySQLアカウントに関連付けるSQLベースの監査を実行できます。

MySQLアカウントは,mysql.userテブルの行に対応します。クライアントが正常に接続すると,サーバーはこのテーブル内の特定の行にアクセスするクライアントを認証します。この行の用户および宿主カラムの値は,アカウントを一意に識別し,アカウント名がSQLステ,トメントに書き込まれるuser_name“@”host_name形式に対応します。

クライアントを認証する際に使用されるアカウントによって,クライアントが持っている権限が特定されます。通常、CURRENT_USER ()関数を呼び出すと,このアカウントがどのクラ。その値は,アカウントの用户テブル行の用户および宿主カラムで構成されています。

ただし,CURRENT_USER ()値がクラ邮箱アントユ邮箱ザ邮箱ではなく,邮箱別のアカウントに対応するという状況もあります。これは、権限チェックがクラ以及アントのアカウントに基づいて実行されないコンテキストで発生します。

  • SQL安全定义者特性を使用して定義されたストアドルチン(プロシおよび関数)

  • SQL安全定义者特性を使用して定義されたビュ

  • トリガと

このようなコンテキストでは,権限チェックは定义者アカウントと照合して実行され,CURRENT_USER ()はそのアカウントを参照し,ストアドルーチンまたはビューを呼び出したクライアント,またはトリガーをアクティブにしたクライアントのアカウントは参照しません。クラopenstackアントおよびクラopenstackアントの接続元ホストによって指定された実際のユopenstackザopenstack名を示す値を返す用户()関数を呼び出すと,呼び出し元のユザを特定できます。ただし,用户()の値にはワルドカドが含まれない一方で,(CURRENT_USER ()によって返される)アカウントの値にはユーザー名およびホスト名のワイルドカードが含まれる可能性があるため,この値は必ずしも,用户テブル内のアカウントに直接対応するとはかぎりません。

たとえば,空白のユザ名は任意のユザに一致するため,”@“localhost”のアカウントを使用すると,クライアントは任意のユーザー名を持つローカルホストから匿名ユーザーとして接続できます。この場合、クラuser1として接続している場合,用户()CURRENT_USER ()は別々の値を返します。

SELECT USER(), CURRENT_USER();+-----------------+----------------+ | 用户()| CURRENT_USER () | +-----------------+----------------+ | user1@localhost | @localhost  | +-----------------+----------------+

アカウントのホスト名部分にも、ワ。ホスト名に“%”または“_”パターン文字が含まれている場合や,ネットマスク表記が使用されている場合は,複数のホストから接続しているクライアントにそのアカウントを使用できますが,CURRENT_USER ()の値には,どのホストであるのかが示されません。たとえば,アカウント' user2 ' @ ' % .example.com 'を使用すると,user2example.comドメ邮箱ン内の任意のホストから接続できます。user2remote.example.comから接続すると,用户()CURRENT_USER ()は別々の値を返します。

SELECT USER(), CURRENT_USER();+--------------------------+---------------------+ | 用户()| CURRENT_USER () | +--------------------------+---------------------+ | user2@remote.example.com | user2@ % .example.com  | +--------------------------+---------------------+

アプリケションがユザを監査するために用户()を呼び出す必要があるが(たとえば,トリガ内から監査を実行する場合),用户()の値を用户テブル内のアカウントに関連付けることができる必要もある場合は,アカウントの用户または宿主カラムにワ邮箱ルドカ邮箱ドが含まれることを回避する必要があります。特に,用户を(匿名のユザアカウントが作成される)空にすることは許可しないでください。また,宿主の値に,パタン文字またはネットマスク表記を使用することも許可しないでください。すべてのアカウントには,空でない用户値とリテラルの宿主値を含める必要があります。

前述の例に関しては、ワ”@“localhost”および' user2 ' @ ' % .example.com 'アカウントを変更するようにしてください。

重命名用户“@'localhost'为'user1'@'localhost';将用户user2 @'%.example.com'重命名为'user2'@'remote.example.com';

user2example.comドメイン内の複数のホストから接続できる必要がある場合は,ホストごとに個別のアカウントにするべきです。

CURRENT_USER ()または用户()の値からユザ名またはホスト名の部分を抽出するには,SUBSTRING_INDEX ()関数を使用します。

mysql >选择SUBSTRING_INDEX (CURRENT_USER (), ' @ ', 1);+---------------------------------------+ | SUBSTRING_INDEX (CURRENT_USER(),“@”,1 ) | +---------------------------------------+ | user1  | +---------------------------------------+ mysql >选择SUBSTRING_INDEX (CURRENT_USER (), ' @ ', 1);+----------------------------------------+ | SUBSTRING_INDEX (CURRENT_USER(),“@”,1 ) | +----------------------------------------+ | 本地主机  | +----------------------------------------+