创建权限用户(CREATE USER/INSERT/GRANT)

Exisi 2023-01-24 16:16:15
Categories: Tags:
  • MySQL 在安装时,会默认创建一个名为 root 的用户,该用户拥有超级权限,可以控制整个 MySQL 服务器。

 

  • 在对 MySQL 的日常管理和操作中,为了避免有人恶意使用 root 用户控制数据库,我们通常创建一些具有适当权限的用户,尽可能地不用或少用 root 用户登录系统,以此来确保数据的安全访问。

 

  • mysql是通过使用 用户名+主机名 来判断一个用户的身份,也是由此来判断一个用户的权限

 

  • MySQL 提供了以下 3 种方法创建用户。
    1. 使用 CREATE USER 语句创建用户
    2. 使用 INSERT 语句在 mysql.user 表中添加用户
    3. 使用 GRANT 语句创建用户

 

 

使用CREATE USER语句

  • 可以使用 CREATE USER 语句来创建 MySQL 用户,并设置相应的密码。

语法

CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ]  '<密码>' ] <用户名> [ IDENTIFIED BY [ PASSWORD ]  '<密码>' ]

解析

参数

描述

<用户>

指定创建用户账号,格式为 user_name'@'host_name

这里的user_name是用户名,host_name为主机名,即用户连接 MySQL 时所用主机的名字

如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限

IDENTIFIED BY

用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。

PASSWORD

PASSWORD 表示使用哈希值设置密码,该参数可选。如果密码是一个普通的字符串,则不需要使用 PASSWORD 关键字。

<密码>

表示用户登录时使用的密码,需要用单引号括起来,例如 '123456'

  1. CREATE USER 语句可以不指定初始密码。但是从安全的角度来说,不推荐这种做法。
  2. 使用 CREATE USER 语句的权限用户必须拥有 mysql 数据库的 INSERT 权限或全局 CREATE USER 权限。
  3. 使用 CREATE USER 语句创建一个用户后,MySQL 会在 mysql 数据库的 user 表中添加一条新记录。
  4. CREATE USER 语句可以同时创建多个用户,多个用户用逗号隔开。

示例

mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';

 

Query OK, 1 rows affected (0.06 sec)

 

 

  • MySQL 中,可以使用 password() 函数获取密码的哈希值

示例

mysql> SELECT password('test1');
+-------------------------------------------+
| password('test1')                         |
+-------------------------------------------+
| *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

 

 

  • 通过 PASSWORD 关键字使用密码的哈希值设置密码

示例

mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY PASSWORD

 

'*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';

 

Query OK, 0 rows affected, 1 warning (0.00 sec)

 

  • 新创建的用户拥有的权限很少,它们只能执行不需要权限的操作。如登录 MySQL、使用 SHOW 语句查询所有存储引擎和字符集的列表等。如果两个用户的用户名相同,但主机名不同,MySQL 会将它们视为两个用户,并允许为这两个用户分配不同的权限集合。

 

 

 

 

使用 INSERT 语句

  • 可以使用 INSERT 语句将用户的信息添加到 mysql.user 表中,但必须拥有对 mysql.user 表的 INSERT 权限。通常 INSERT 语句只添加 HostUser 和 authentication_string 3 个字段的值

语法

INSERT INTO mysql.user

(Host, User,  authentication_string, ssl_cipher, x509_issuer, x509_subject)

VALUES

('主机名', '权限用户名', PASSWORD('密码'), '', '', '')

  • User Host 字段区分大小写,创建用户时要指定正确的用户名称或主机名

 

  • 如果你使用的是 MySQL 5.7 之前的版本,将 authentication_string 字段替换成 Password 即可。

 

  • 由于ssl_cipherx509_issuer x509_subject 3 个字段没有默认值,所以向 user 表插入新记录时,一定要设置这 3 个字段的值,否则 INSERT 语句将不能执行

示例

mysql> INSERT INTO mysql.user(Host, User,  authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('host', 'username', PASSWORD('password'), '', '', '');

 

Query OK, 1 row affected, 1 warning (0.02 sec)

 

  • 结果显示,新建用户成功。但是这时如果通过该账户登录 MySQL 服务器,不会登录成功,因为 test2 用户还没有生效。可以使用 FLUSH 命令让用户生效,命令如下:

FLUSH PRIVILEGES;

  • 使用以上命令可以让 MySQL 刷新系统权限相关表。执行 FLUSH 命令需要 RELOAD 权限

 

 

 

使用GRANT语句

MySQL 提供了 GRANT 语句,可以在创建权限用户的同时,为用户添加权限

语法

GRANT <权限> ON database.table TO <用户> [IDENTIFIED BY [PASSWORD] '<密码>']

 

参数

描述

<权限>

表示新用户的权限

database.table

表示新用户的权限范围,即只能在指定的数据库和表上使用自己的权限

<用户>

指定新用户的账号,由用户名和主机名构成;格式为 user_name'@'host_name

IDENTIFIED BY

用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。

PASSWORD

PASSWORD 表示使用哈希值设置密码,该参数可选。如果密码是一个普通的字符串,则不需要使用 PASSWORD 关键字。

<密码>

表示用户登录时使用的密码,需要用单引号括起来,例如 '123456'

示例

mysql> GRANT SELECT ON *.* TO 'test3'@localhost IDENTIFIED BY 'test3';

 

Query OK, 0 rows affected, 1 warning (0.01 sec)

 

  • 其中“*.*” 表示所有数据库下的所有表。结果显示创建用户成功,且 test3 用户对所有表都有查询(SELECT)权限

 

来自 <http://c.biancheng.net/view/7490.html>