MySQL GRANT 授权语句

文章目录
  1. 1. GRANT 语句基本语法
  2. 2. MySQL GRANT 语句示例
  3. 3. GRANT 相关命令

在服务器创建完 MySQL 数据库后经常需要给角色分配远程连接的权限,我一般会在初始化的时候选择禁用远程连接,然后再通过 GRANT 给固定 IP 开启远程连接数据库的权限。

GRANT 语句基本语法

1
2
3
GRANT privilege[,privilege,...] ON database.table 
-> TO username@user_ip [INDENTIFIED BY password_you_want]
-> [REQUIRE tsl_option] [WITH [GRANT_OPTION] resource_option]];

上面为一整句 GRANT 语句,为了方便阅读我做了分行处理。

第一行为权限分配:

GRANT 关键字后紧跟着需要分配的权限,其中 privilege 有很多可选项(后面会单独讲),也可以设置为 ALL 表示给予全部权限;

ON 关键字后紧跟着针对哪个数据库和数据表,其中 database 可以为任意数据库名,也可以使用通配符 * 表示全选;table 可以为任意数据表名,同样可以使用通配符 * 表示全选,因此 *.* 则表示全部数据库的全部表;

第二行为用户指定:

TO 关键字后指定权限分配指向的 MySQL 用户和 IP 地址,两者使用 @ 隔开,其中 username 可以已经是已经存在的用户也可以是还不存在的用户(该命令会自动创建所需用户),也可以使用通配符 % 表示全选;设置 IP 是可以在任意 IPV4IP 段使用通配符 % 表示全选,例如 192.168.0.%,也可以直接设置为 % 表示全选;

INDENTIFIED BY 为可选字段,后面跟随想要设置的用户登录密码

第三行为详细配置项:

REQUIRE 为可选项,用来设置数据库安全连接;

WITH GRANT OPTION 为可选项,用来做一些附加设置,这里就不详细展开了;

MySQL GRANT 语句示例

1
2
3
4
5
# 赋予通过 localhost 登录的 root 用户全部数据库和数据表的全部权限
GRANT ALL ON *.* TO 'root'@'loaclhost';

# 赋予通过任意 ip 登录的 test_user 用户查看 testdb 数据库下全部数据表的权限
GRANT select ON testdb.* to 'test_user'@'%';

GRANT 相关命令

1
2
3
4
5
# 查看除了 ALL 以外其他可选择的 privilege 选项
SHOW privileges;

# 查看已经分配给某个特定用户的 GRANT 语句
SHOW GRANTS FOR username@user_ip