Rol*_*DBA 10
也许您想在全局用户级别删除 DROP 权限
UPDATE mysql.user SET drop_priv = 'N' WHERE user='...' AND host='...' and db='...';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
需要记住的一点:DROP权限包括数据库、表和视图。不幸的是,DROP DATABASE和DROP TABLE属于相同的权限范围。
例如
我创建了一个名为 kumar 的用户和一个名为 kumar 的数据库
mysql> create database kumar;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on kumar.* to kumar@'%';
Query OK, 0 rows affected (0.06 sec)
mysql> use kumar
Database changed
mysql> create table rolando (a int);
Query OK, 0 rows affected (0.08 sec)
Run Code Online (Sandbox Code Playgroud)
我以 kumar 的身份登录 mysql 并删除了数据库 kumar
mysql> drop database kumar;
Query OK, 1 row affected (0.07 sec)
Run Code Online (Sandbox Code Playgroud)
所以,我以超级用户的身份重新创建了它。我还创建了一个数据库 kumar2
mysql> create database kumar;
Query OK, 1 row affected (0.00 sec)
mysql> use kumar
Database changed
mysql> create table rolando (a int);
Query OK, 0 rows affected (0.07 sec)
mysql> create database kumar2;
Query OK, 1 row affected (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
我试图放弃 kumar2
mysql> show grants for kumar@'%';
+--------------------------------------------------+
| Grants for kumar@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'kumar'@'%' |
| GRANT ALL PRIVILEGES ON `kumar`.* TO 'kumar'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)
mysql> select user(),current_user();
+-----------------+----------------+
| user() | current_user() |
+-----------------+----------------+
| kumar@localhost | kumar@% |
+-----------------+----------------+
1 row in set (0.00 sec)
mysql> drop database kumar2;
ERROR 1044 (42000): Access denied for user 'kumar'@'%' to database 'kumar2'
mysql>
Run Code Online (Sandbox Code Playgroud)
因此,kumar@'%' 只能删除 kumar 数据库。kumar@'%' 不能删除任何其他数据库。
用户 kumar@'%' 可以删除以下内容:
您可以允许该用户访问 kumar 数据库的所有三个或限制所有三个。
小智 4
不要授予您的用户对数据库和/或服务器的所有权限。独立对数据库、服务器和表使用 GRANT 权限。
Mysql“权限”:http://dev.mysql.com/doc/refman/5.1/en/grant.html#grant-database-privileges
例如 :
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';
GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';
Run Code Online (Sandbox Code Playgroud)