[解決済み] MySql : 読み取り専用オプションの付与?
質問
ある DB スキーマのすべての READ 権限を付与したいユーザがいます。
一つの方法はこれです。
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
すべての読み取り操作をグラントでグループ化する方法はありますか?
どのように解決するのですか?
データベースに対するすべてのREAD操作に対応する単一権限がある場合。
すべての読み取りをどのように定義するかによります。
"テーブルやビューからの読み込み"は
SELECT
の特権です。もし、それが "すべての読み取り" という意味であれば、そうです。
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
しかし、あなたが言っているのは、すべてのものを「見る」能力、つまり「見るが触れない」能力のようですが、では、他にどんな読み方があるのか、考えてみましょう。
"読む" ビューの定義が
SHOW VIEW
の特権です。
"他のユーザが現在実行しているクエリのリストを読む" は
PROCESS
の特権です。
"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
ステートメントを使用して新しいユーザーを作成することができます。
もしあなたが、限られた権限のセットを設定し、ユーザーに付与し、そしておそらく未使用の権限を削除するための単一の操作を望むなら、それはあなたがやりたいことすべてをカプセル化したストアドプロシージャを作成することによって行うことができます。 プロシージャの本文の中に
GRANT
ステートメントを構築し、直接グラントテーブルを操作します。
で
このデータベース管理者の最近の質問
において、投稿者は非特権ユーザーが他のユーザーを変更する能力を欲していました。もちろん、これは通常できることではありません -- 他のユーザーを変更できるユーザーは、定義上、非特権ユーザーではありません -- しかしながら、ストアドプロシージャはこの場合、良い解決策になります。
DEFINER
ユーザーのセキュリティコンテキストで実行されるため、誰でも
EXECUTE
を持つユーザは、一時的に昇格した権限を持つことになり、 そのプロシージャが達成する特定のことを行うことができるようになります。
関連
-
MySql認証ベースのvsftpd仮想ユーザー
-
MysqlからElasticsearchにデータを同期させる方法を説明します。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] pipで特定のバージョンのパッケージをインストールする
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] MySQL で特定のカラム名を持つすべてのテーブルを見つけるにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQL基本クエリステートメント
-
MySQLインストールチュートリアル(Windows用)詳細
-
MySQLインストールチュートリアル(Linux版
-
mysqlインデックスが長すぎる特殊なキーが長すぎる解決策
-
MySQLの悲観的ロックと楽観的ロックの実装スキーム
-
[解決済み】マルチパート識別子をバインドできない
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
[解決済み] 1つのSQLクエリで複数のカウントを取得する方法は?
-
[解決済み] mysqladminのフラッシュホストでブロックを解除する方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?