1

「マネージャー」アクセス権を持つ特定のユーザーにアクセス許可を付与しようとしています。彼らは自分のグループの人々にしかSELECTできません。UPDATEDB はredflameで、テーブルはpayrollです。

表の一部は次のとおりです。

+------+---------+--------+-----------+--------+
| Dept | Manager | Name   | Birthdate | Salary |
+------+---------+--------+-----------+--------+
|    1 | Y       | BOB    | 1/1/1     |  50000 |
|    1 | N       | BILL   | 2/2/2     |  40000 |
|    1 | N       | BART   | 3/3/3     |  70000 |
|    2 | Y       | JIM    | 4/4/4     |  40000 |
|    2 | N       | JANET  | 5/5/5     |  50000 |
...

私はマネージャーにのみ権限を許可し、彼のグループにのみ許可SELECTしたいと考えています。UPDATE私は試した、

GRANT SELECT (Dept, Manager, Name, Birthdate),
      UPDATE (Dept, Manager, Name, Birthdate)
   ON redflame.payroll WHERE Dept = '1'
   TO 'Bob'@'localhost';

Bobこれが機能しないことはわかっていますが、彼に基づいての許可をどのように実装しますDeptか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

すべての部門のビューを作成し、それらに権限を付与します。

于 2013-04-08T12:01:02.867 に答える
0

MySQLのマニュアルによると:

http://dev.mysql.com/doc/refman/5.1/en/grant.html

通常、データベース管理者は最初に CREATE USER を使用してアカウントを作成し、次に GRANT を使用してその権限と特性を定義します。

給与テーブルに新しいレコードを追加するときのphpコードでは、次のことを行う必要があります(私は疑似コードで書いています):

if((new->Dept == 1) and (new->Manager == 'Y'))
{
      if (user with name == new->Name doesn't exist)
      {
            Create a new user with name = new->Name
            Grant SELECT and UPDATE privileges to the newly created user ON redflame.payroll table
      }
      else
      {
            error: user already exists!
      }
}

給与表のレコードを更新する場合:

if(the record was a Manager and he is updated to non Manager)
{
      DROP USER with name = old->Name
}

if(the record was not a Manager and he is updated to Manager)
{
      if (user with name == new->Name doesn't exist)
      {
            Create a new user with name = new->Name
            Grant SELECT and UPDATE privileges to the newly created user ON redflame.payroll table
      }
      else
      {
            error: user already exists!
      }
}

給与表からレコードを削除する場合:

if((old->Dept == 1) and (old->Manager == 'Y'))
{
      if (user with name == old->Name exists)
      {
            DROP USER with name = old->Name
      }
}

データベースへのルート アクセス権がある場合は、ON INSERT、ON UPDATE、および ON DELETE トリガーを作成できます。次に、このロジックを使用して、SQL コードを記述します。それ以外の場合は、php で実装します。

于 2013-04-08T12:20:17.173 に答える