新しい人が入社し、以下を使用してmysqlで彼女のアカウントを作成しました。
CREATE USER 'username' IDENTIFIED BY 'password'
彼女は自分のスキーマを作成する必要があるため、次のように使用します。
GRANT CREATE ON *.* TO username;
問題は、彼女が新しいスキーマとテーブルを作成できるようになりましたが、それを使って何もできないということです。彼女が既存のスキーマ/テーブルにアクセスできないようにして、彼女自身のデータベースを作成し、それで何でもできるようにしたいと思います。これは可能ですか?
データベースmydb
のすべての特権をusername
に付与するには
GRANT ALL PRIVILEGES ON mydb.* TO username;
テーブルの特権を付与するにはmydb.mytable
からusername
GRANT ALL PRIVILEGES ON mydb.mytable TO username;
最初にユーザーを削除して、サーバー全体の権限をすべてクリアすることをお勧めします。
DROP USER username;
CREATE USER username;
GRANT ALL PRIVILEGES ON mydb.* TO username;
なぜ最初にユーザーを落とすのですか?最初にusername
というユーザーを作成してログインしたとき、ユーザー名には権限がありません。ただ走れ SHOW GRANTS;
それを見るために。 GRANT USAGE ON *.* TO username
。現時点では、username
はログインのみ可能です。これは、特権を作成するチャンスです。
走れば
GRANT ALL PRIVILEGES ON *.* TO username;
ユーザー名はグローバルデータベース権限(すべてのデータベース)を持ちます
走れば
GRANT ALL PRIVILEGES ON mydb.* TO username;
usernameはmydb
データベースのみに対するデータベース全体の権限を持ちます。
走れば
GRANT ALL PRIVILEGES ON mydb.mytable TO username;
ユーザー名は、mydb.mytableに対してのみテーブル権限を持ちます。
それらを混合することはできません。誤ってusername
にしてはいけないusername
特権を誤って取得した.
3つのレベルに存在する特権を確認するには、次のクエリを実行します。
SELECT table_name,column_name
FROM information_schema.columns
WHERE table_schema='mysql'
AND table_name IN ('user','db','tables_priv')
AND column_name LIKE '%\_priv'
ORDER BY table_name,column_name;
MySQL 5.5の特権
mysql> SELECT table_name,column_name
-> FROM information_schema.columns
-> WHERE table_schema='mysql'
-> AND table_name IN ('user','db','tables_priv')
-> AND column_name LIKE '%\_priv'
-> ORDER BY table_name,column_name;
+-------------+------------------------+
| table_name | column_name |
+-------------+------------------------+
| db | Alter_priv |
| db | Alter_routine_priv |
| db | Create_priv |
| db | Create_routine_priv |
| db | Create_tmp_table_priv |
| db | Create_view_priv |
| db | Delete_priv |
| db | Drop_priv |
| db | Event_priv |
| db | Execute_priv |
| db | Grant_priv |
| db | Index_priv |
| db | Insert_priv |
| db | Lock_tables_priv |
| db | References_priv |
| db | Select_priv |
| db | Show_view_priv |
| db | Trigger_priv |
| db | Update_priv |
| tables_priv | Column_priv |
| tables_priv | Table_priv |
| user | Alter_priv |
| user | Alter_routine_priv |
| user | Create_priv |
| user | Create_routine_priv |
| user | Create_tablespace_priv |
| user | Create_tmp_table_priv |
| user | Create_user_priv |
| user | Create_view_priv |
| user | Delete_priv |
| user | Drop_priv |
| user | Event_priv |
| user | Execute_priv |
| user | File_priv |
| user | Grant_priv |
| user | Index_priv |
| user | Insert_priv |
| user | Lock_tables_priv |
| user | Process_priv |
| user | References_priv |
| user | Reload_priv |
| user | Repl_client_priv |
| user | Repl_slave_priv |
| user | Select_priv |
| user | Show_db_priv |
| user | Show_view_priv |
| user | Shutdown_priv |
| user | Super_priv |
| user | Trigger_priv |
| user | Update_priv |
+-------------+------------------------+
50 rows in set (0.01 sec)
mysql>
クエリを実行して5.1および5.0の特権を確認します
CREATE TABLESPACE dwtblspc LOGGING DATAFILE 'D:\oraclexe\app\Oracle\oradata\XE\DWTBLSPC.DBF' SIZE 300M AUTOEXTEND ON NEXT 1048K MAXSIZE UNLIMITED;
CREATE USER prateek IDENTIFIED by prateek DEFAULT TABLESPACE dwtblspc ACCOUNT UNLOCK;
GRANT unlimited tablespace to prateek ;
CREATE ROLE prateek_role;
GRANT CREATE SESSION,ALTER SESSION,CREATE TABLE,CREATE CLUSTER,CREATE SYNONYM,CREATE VIEW,CREATE SEQUENCE,
CREATE DATABASE LINK,CREATE PROCEDURE,CREATE TRIGGER,CREATE TYPE,CREATE OPERATOR,CREATE INDEXTYPE,BACKUP ANY TABLE,
SELECT ANY TABLE,CREATE ANY TABLE,CREATE ANY INDEX,ALTER ANY INDEX,ALTER ANY INDEXTYPE,DROP ANY INDEX,DROP ANY INDEXTYPE to prateek_role;
GRANT prateek_role to prateek ;
お役に立てば幸いです。お役に立てば幸いです。