dbスキーマに対するすべてのREAD権限を付与したいユーザーがいます。
一つの方法はこれです。
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
すべての読み取り操作をグラントにまとめる方法はありますか?
もし、データベースに対するすべての読み取り操作を行う権限があるとします。
どのように定義しているかによります。
"Reading"テーブルやビューからの読み込みは、SELECT
権限です。もしそれが"all read"の意味するところであれば、イエスです。
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
しかし、あなたが言っているのは、すべてのものを"see"する能力、つまり、"look but not touch."する能力のことのようです。
"Reading"ビューの定義は、SHOW VIEW
という権限です。
"Reading" Reading the list of current executing queries by other users is the PROCESS
privilege.
"Reading" 現在のレプリケーションの状態は REPLICATION CLIENT
権限です。
これらのいずれか、あるいはすべてが、問題となるユーザーの性質に応じて、意図した以上の情報を公開する可能性があることに注意してください。
もしそれがリーディングであれば、単一の GRANT
ステートメントで、これらのいずれか(または 利用可能な特権 の他のいずれか)を組み合わせることができます。
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
しかし、あなたが尋ねているような、他の特権のサブセットを許可する単一の特権はありません。
もし手動で作業をしていて、特定のクラスのユーザーに通常付与する権限を正確に覚えておく必要がなく、もっと簡単な方法を探しているのであれば、同等のユーザー'の権限を再生成するステートメントを調べ、それを変更して同様の権限を持つ新しいユーザーを作成することができます。
mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
'not_leet'と 'localhost'を追加したい新規ユーザに合わせて変更し、パスワードも変更することで、新規ユーザを作成するための再利用可能な GRANT
ステートメントになります。
また、限られた権限を設定してユーザーに付与したり、付与されていない権限を削除したりする操作を一度に行いたい場合は、やりたいことをすべてカプセル化したストアドプロシージャを作成することで実現できます。 プロシージャの本体では、動的SQLでGRANT
文を作成したり、グラントテーブル自体を直接操作したりします。
データベース管理者に関する最近の質問]2では、投稿者は非特権ユーザーが他のユーザーを変更できる機能を求めていましたが、これはもちろん通常できることではありません -- 他のユーザーを変更できるユーザーは、ほぼ定義通りなぜなら、ストアドプロシージャは DEFINER
ユーザーのセキュリティコンテキストで実行され、プロシージャの EXECUTE
権限を持つ誰もが一時的に昇格した特権を引き受けることができ、プロシージャが達成する特定の事柄を行うことができるからです。
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
これにより、Viewsを含むすべてのデータベースに対して、SELECT
権限を持つユーザーが作成されます。