日志

MySQL添加用户、授权和访问控制

  • 有哪些方式?

你可以通过两种方式创建MySQL用户:

  1. 通过账户管理语句,例如GRANT、CREATE USER等.
  2. 直接用INSERT、UPDATE、DELETE等语句操作MySQL的授权表(mysql.user、mysql.host、mysql.db、mysql.tables_priv、mysql.columns_priv)

显然方式1比方式2更简洁和有助于减少错误

另外你也可以通过GUI工具(如:MySQL WorkBench)或第三方程序(如:phpmyadmin)

  • 通过账户管理语句实现

a) 通过root用户(或具备CREATE USER 权限的用户)连接mysql

mysql -u root -p 你的用户密码

b) CREATE USER 语句用法

# 创建一个名为 alice 密码为 alicepass 的用户,该用户只能从 localhost 连接

CREATE USER 'alice'@'localhost' IDENTIFIED BY 'alicepass';
# 创建一个名为 bob 密码为 bobpass 的用户,允许该用户从任意host连接

CREATE USER 'bob'@'%' IDENTIFIED BY 'bobpass';
# 创建一个名为 chris 密码为 chrispass 的用户,该用户允许从任何 example.com 域名下的host来连接

CREATE USER 'chris'@'%.example.com' IDENTIFIED BY 'chrispass';

c) GRANT 语句用法

# 给 alice 用户分配所有权限,必须要从 localhost 连接

GRANT ALL PRIVILEGES ON *.* TO 'alice'@'localhost' WITH GRANT OPTION;
# 给  bob 用户分配所有数据库的 RELOAD、PROCESS 权限,并且可以把这些权限授权给其他用户(WITH GRANT OPTION的作用)

GRANT RELOAD,PROCESS ON *.* TO 'bob'@'%' WITH GRANT OPTION;
# 给 chris 用户分配 customer 数据库的 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 权限,必须从任何 example.com 域名下的host来连接

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.* TO 'chris'@'%.example.com';

d) REVOKE 语句用法

# 撤销 david 用户所有数据库的所有权限

REVOKE ALL PRIVILEGES ON *.* FROM 'david'@'%';

e) DROP USER 语句用法

# 删除 alice 用户,不再允许该用户从localhost连接,不指定host时默认为 '%' ,DROP USER不会自动关闭任何已经打开的用户SESSION,一旦SESSION被关闭则该用户即被移除

DROP USER 'alice'@'localhost';
转载请注明出处:

© http://hejunhao.me