5

ユーザーは、データベースレベルでSELECTが付与され、アクセスが必要な特定のテーブルでINSERT / UPDATE / DELETEが付与された、かなり低レベルのユーザーとして本番データベースにログインします。

また、一時テーブルを作成するためのアクセス許可もあります(より複雑なクエリの一部に必要です)。問題は、一時テーブルを作成することはできても、INSERTにアクセスできないことです。

私たちが見つけた回避策は、同じ名前の「実際の」(永続的な?)テーブルを作成し(ただし、フィールドが1つしかない)、そこに挿入するためのアクセスを許可することです。次に、一時テーブルが同じ名前で作成されると、システムは永続テーブルではなく、それを使用します。

mysql> CREATE TEMPORARY TABLE `testing` (`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30));
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO `testing` (`name`) VALUES ('testing');
ERROR 1142 (42000): INSERT command denied to user 'stduser'@'office.companyname.co.uk' for table 'testing'

(別のセッションで、rootとして)テーブルへのアクセスを許可しようとすると、次のことはできません。

mysql> GRANT INSERT ON testdb.testing TO 'stduser'@'%';
ERROR 1146 (42S02): Table 'testdb.testing' doesn't exist

だから私の質問は、基本的に、同じ名前の「永続的な」テーブルがぶら下がることなく、一時テーブルにINSERT / UPDATE /DELETEを許可できるかどうかです。

4

3 に答える 3

6

MySQLリファレンスによると:

MySQLを使用すると、存在しないデータベースまたはテーブルに対する特権を付与できます。テーブルの場合、付与される特権にはCREATE特権が含まれている必要があります。

したがって、上記の付与ステートメントにCREATE権限を含めてみてください。

于 2010-03-09T13:50:19.523 に答える
4

これを回避する1つの方法は、特別なデータベースを作成し、ユーザーにそのデータベースへの書き込みアクセスを許可してから、その特別なデータベースにそれらの一時テーブルを作成させることです。

于 2010-03-04T12:22:57.443 に答える
1

MySQLの付与は、実際に存在するオブジェクトとは無関係です。(まだ)存在しないテーブルに付与することができ、テーブルが作成された場合、それらの権限がテーブルに割り当てられます。これは、特定のテーブルを作成する権限をユーザーに付与できることを意味します。

一時テーブル(たとえば、tempと呼ばれる)専用のデータベースを作成し、ユーザーにそのデータベースへのアクセスを許可したいと思います。データベースベースの権限は、オブジェクトごとの権限よりも管理がはるかに簡単です。

于 2009-12-10T11:51:28.870 に答える