MySQL创建删除用户相关操作详解

版权声明:转载请标注出处与作者,写文不易,相互尊重从小事做起。 https://blog.csdn.net/JasonRaySHD/article/details/82528600

Mark一篇有关MySQL用户操作的文章

声明:本文部分转载文中红色加粗网页链接,修改了部分代码格式以及删减部分内容。
一, 创建用户:

命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password';

注意:这里的username是使用 键盘ESC键下方的按键在英文输入模式输入的 ,不要用 ' 单引号。在workbench中会报错。

说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

例子:

CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY ''; 
CREATE USER 'pig'@'%'; 

二,授权:

命令:GRANT privileges ON databasename.tablename TO ‘username’@’host’

说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL。如果要授予用户某个数据库的某个表的权限,则可以写为:databasename(数据库名),tablename(表名)如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.

例子:

GRANT SELECT, INSERT ON test.user TO 'pig'@'%'; 
GRANT ALL ON *.* TO 'pig'@'%'; 

注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:

GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION; 

三.设置与更改用户密码

命令:SET PASSWORD FOR ‘username’@’host’ = PASSWORD(‘newpassword’);
在这里,若是使用MySQL最新版本(MySQL 8.0)会报错,于是执行以下语句则通过。

SET PASSWORD FOR 'jason'@'localhost' = '12345';

若要修改当前登陆用户则使用

SET PASSWORD = PASSWORD("newpassword");

四.撤销用户权限

命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host';

说明: privilege, databasename, tablename - 同授权部分.

例子: REVOKE SELECT ON . FROM ‘pig’@’%’;

注意: 假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%', 则在使用REVOKE SELECT ON *.* FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作。相反,如果授权使用的是GRANT SELECT ON *.* TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select 权限.

具体信息可以用命令SHOW GRANTS FOR ‘pig’@’%’; 查看.

五.删除用户

命令: DROP USER 'username'@'host';

附表:在MySQL中的操作权限

ALTER Allows use of ALTER TABLE.
ALTER ROUTINE Alters or drops stored routines.
CREATE Allows use of CREATE TABLE.
CREATE ROUTINE Creates stored routines.
CREATE TEMPORARY TABLE Allows use of CREATE TEMPORARY TABLE.
CREATE USER Allows use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES.
CREATE VIEW Allows use of CREATE VIEW.
DELETE Allows use of DELETE.
DROP Allows use of DROP TABLE.
EXECUTE Allows the user to run stored routines.
FILE Allows use of SELECT… INTO OUTFILE and LOAD DATA INFILE.
INDEX Allows use of CREATE INDEX and DROP INDEX.
INSERT Allows use of INSERT.
LOCK TABLES Allows use of LOCK TABLES on tables for which the user also has SELECT privileges.
PROCESS Allows use of SHOW FULL PROCESSLIST.
RELOAD Allows use of FLUSH.
REPLICATION Allows the user to ask where slave or master
CLIENT servers are.
REPLICATION SLAVE Needed for replication slaves.
SELECT Allows use of SELECT.
SHOW DATABASES Allows use of SHOW DATABASES.
SHOW VIEW Allows use of SHOW CREATE VIEW.
SHUTDOWN Allows use of mysqladmin shutdown.
SUPER Allows use of CHANGE MASTER, KILL, PURGE MASTER LOGS, and SET GLOBAL SQL statements. Allows mysqladmin debug command. Allows one extra connection to be made if maximum connections are reached.
UPDATE Allows use of UPDATE.
USAGE Allows connection without any specific privileges

来源:http://yingxiong.javaeye.com/blog/451208

本文实例,运行于 MySQL 5.0 及以上版本。

MySQL 赋予用户权限命令的简单格式可概括为:

grant 权限 on 数据库对象 to 用户

一、grant 授予普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。

grant insert   on testdb.*to common_user@'host'
grant update on testdb.*to common_user@'host'
grant delete  on testdb.*to common_user@'host'

或者,用一条 MySQL 命令来替代:

grantselect, insert, update, deleteon testdb.*to common_user@'%'

二、grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。

grant 创建、修改、删除 MySQL 数据表结构权限。

grant create on testdb.*to developer@'192.168.0.%';
grant alter   on testdb.*to developer@'192.168.0.%';
grant drop   on testdb.*to developer@'192.168.0.%';

grant 操作 MySQL 外键权限。

grant references on testdb.*to developer@'192.168.0.%';

grant 操作 MySQL 临时表权限。

grant create temporary tables on testdb.*to developer@'192.168.0.%';

grant 操作 MySQL 索引权限。

grant index on testdb.*to developer@'192.168.0.%';

grant 操作 MySQL 视图、查看视图源代码 权限。

grant create view on testdb.*to developer@'192.168.0.%';
grant show viewon testdb.*to developer@'192.168.0.%';

grant 操作 MySQL 存储过程、函数 权限。

grant create routine on testdb.*to developer@'192.168.0.%';
grant alter routine on testdb.*to developer@'192.168.0.%';
grant executeon testdb.*to developer@'192.168.0.%';

三、grant 普通用户user管理某个 MySQL 数据库的权限。

grant all privileges on testdb to user@'localhost'

其中,关键字 “privileges” 可以省略。

四、grant 高级 user 管理 MySQL 中所有数据库的权限。

grant all on *.* to user@'localhost'

五、MySQL grant 权限,分别可以作用在多个层次上。

  1. grant 作用在整个 MySQL 服务器上:

grant select on*.*to user@localhost; 可以查询 MySQL 中所有数据库中的表。
grant all on*.*to user@localhost; 可以管理 MySQL 中的所有数据库

  1. grant 作用在单个数据库上:

grant select on testdb.* to 'user'@'localhost'; 可以查询 testdb 中的表。

  1. grant 作用在单个数据表上:

grant select, insert, update, delete on testdb.orders to 'user'@'localhost';

这里在给一个用户授权多张表时,可以多次执行以上语句。例如:

grant select(user_id,username) on smp.users to 'user'@'host' identified by'123345';
grant select on smp.mo_sms to 'user'@'host' identified by'123345';

  1. grant 作用在表中的列上:

grant select(id, se, rank) on testdb.apache_log to 'user'@'localhost';

  1. grant 作用在存储过程、函数上:

grant execute on procedure testdb.pr_add to'user'@'localhost'
grant execute on function testdb.fn_add to'user'@'localhost'

六、查看 MySQL 用户权限

查看当前用户(自己)权限:

show grants;

查看其他 MySQL 用户权限:

show grants for dba@localhost;

七、撤销已经赋予给 MySQL 用户权限的权限。

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

grant all on*.*to user@localhost;
revoke all on*.*from user@localhost;

八、MySQL grant、revoke 用户权限注意事项

  1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

  2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“

grant select on testdb.*to ‘user’@’localhost’with grant option;
这个特性一般用不到。实际中,数据库权限最好由 user 来统一管理。


遇到 SELECT command denied to user ‘用户名’@’主机名’ for table ‘表名’ 这种错误,解决方法是需要把后面的表名授权,即是要你授权核心数据库也要。

我遇到的是SELECT command denied to user ‘my’@’%’ for table ‘proc’,是调用存储过程的时候出现,原以为只要把指定的数据库授权就行了,什么存储过程、函数等都不用再管了,谁知道也要把数据库mysql的proc表授权


mysql授权表共有5个表:user、db、host、tables_priv和columns_priv。

授权表的内容有如下用途:
user表
user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

db表
db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

host表
host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

tables_priv表
tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

columns_priv表
columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

猜你喜欢

转载自blog.csdn.net/JasonRaySHD/article/details/82528600
今日推荐