1

1 つのステートメントで複数のテーブルに対する選択権限を付与するにはどうすればよいですか?

mysql> grant select on dbName.crw_changes to sink;
Query OK, 0 rows affected (0.02 sec)

mysql> grant select on dbName.crw_changes, dbName.bs_services to sink;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' dbName.bs_services at line 1
4

2 に答える 2

1

できません。GRANT SELECT は、一度に 1 つのテーブルに対してのみ機能します。

ただし、回避策があります。次のようなことができます:

SELECT   CONCAT('GRANT SELECT ON test.', TABLE_NAME, ' to ''foouser'';')
FROM     INFORMATION_SCHEMA.TABLES
WHERE    TABLE_SCHEMA = 'test'
          AND TABLE_NAME LIKE 'foo_%'

上記は、「foo_」で始まる「test」スキーマのテーブルを抽出し、それらを出力します。次に、これらの名前をコピーして、ストアド プロシージャまたはクエリ ビルダー ウィンドウに貼り付け、実行できます。

ちなみに、コードは(私によって)テストされていません。http://lists.mysql.com/mysql/202610から取得しました。

于 2009-09-07T08:46:53.623 に答える
1

標準SQLではできません。複数のユーザーが許可されますが、テーブルは 1 つだけです。

これは、ほとんどの SQL 方言にも一般的に当てはまります。制限には理由があり、最も顕著なのは個別のテーブルのアクセス許可のチェックに関連していますが、1980 年代には現在よりも関連性があった可能性があります。

于 2009-09-07T08:44:22.377 に答える