MySQL创建⽤户(3种⽅式)
MySQL 在安装时,会默认创建⼀个名为 root 的⽤户,该⽤户拥有超级权限,可以控制整个 MySQL 服务器。
在对 MySQL 的⽇常管理和操作中,为了避免有⼈恶意使⽤ root ⽤户控制数据库,我们通常创建⼀些具有适当权限的⽤户,尽可能地不⽤或少⽤ root ⽤户登录系统,以此来确保数据的安全访问。
MySQL 提供了以下 3 种⽅法创建⽤户。
1. 使⽤ CREATE USER 语句创建⽤户
2. 在 mysql.user 表中添加⽤户
3. 使⽤ GRANT 语句创建⽤户
下⾯根据实例详细讲解这 3 种⽅法。
1. 使⽤CREATE USER语句创建⽤户
可以使⽤ CREATE USER 语句来创建 MySQL ⽤户,并设置相应的密码。其基本语法格式如下:
CREATE USER <⽤户> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,⽤户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]
参数说明如下:
1) ⽤户
指定创建⽤户账号,格式为user_name'@'host_name。这⾥的user_name是⽤户名,host_name为主机名,即⽤户连接 MySQL 时所⽤主机的名字。如果在创建的过程中,只给出了⽤户名,⽽没指定主机名,那么主机名默认为“%”,表⽰⼀组主机,即对所有主机开放权限。
3) IDENTIFIED BY⼦句
⽤于指定⽤户密码。新⽤户可以没有初始密码,若该⽤户不设密码,可省略此⼦句。
2) PASSWORD 'password'
PASSWORD 表⽰使⽤哈希值设置密码,该参数可选。如果密码是⼀个普通的字符串,则不需要使⽤ PASSWORD 关键字。'password' 表⽰⽤户登录时使⽤的密码,需要⽤单引号括起来。
使⽤ CREATE USER 语句时应注意以下⼏点:
CREATE USER 语句可以不指定初始密码。但是从安全的⾓度来说,不推荐这种做法。
使⽤ CREATE USER 语句必须拥有 mysql 数据库的 INSERT 权限或全局 CREATE USER 权限。
使⽤ CREATE USER 语句创建⼀个⽤户后,MySQL 会在 mysql 数据库的 user 表中添加⼀条新记录。
CREATE USER 语句可以同时创建多个⽤户,多个⽤户⽤逗号隔开。
新创建的⽤户拥有的权限很少,它们只能执⾏不需要权限的操作。如登录 MySQL、使⽤ SHOW 语句查询所有存储引擎和字符集的列表等。如果两个⽤户的⽤户名相同,但主机名不同,MySQL 会将它们视为两个⽤户,并允许为这两个⽤户分配不同的权限集合。
例 1
使⽤ CREATE USER 创建⼀个⽤户,⽤户名是 test1,密码是 test1,主机名是 localhost。SQL 语句和执⾏过程如下。
mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';
Query OK, 1 rows affected (0.06 sec)
结果显⽰,创建 test1 ⽤户成功。
在实际应⽤中,我们应避免明⽂指定密码,可以通过 PASSWORD 关键字使⽤密码的哈希值设置密码。
例 2
在 MySQL 中,可以使⽤ password() 函数获取密码的哈希值,查看 test1 哈希值的 SQL 语句和执⾏过程如下:
mysql> SELECT password('test1');
+-------------------------------------------+
| password('test1') |
+-------------------------------------------+
| *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
“*06C0BF5B64ECE2F648B5F048A71903906BA08E5C”就是 test1 的哈希值。下⾯创建⽤户 test1,SQL 语句和执⾏过程如下:
mysql> CREATE USER 'test1'@'localhost'IDENTIFIED BY PASSWORD '*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';
Query OK, 0 rows affected, 1 warning (0.00 sec)
执⾏成功后就可以使⽤密码“test1”登录了。
2. 使⽤ INSERT 语句新建⽤户
可以使⽤ INSERT 语句将⽤户的信息添加到 mysql.user 表中,但必须拥有对 mysql.user 表的 INSERT 权限。通常 INSERT 语句只添加Host、User 和 authentication_string 这 3 个字段的值。
mysql数据库的方法MySQL 5.7的 user 表中的密码字段从 Password 变成了 authentication_string,
如果你使⽤的是 MySQL 5.7之前的版本,将 authentication_string 字段替换成 Password 即可。
使⽤ INSERT 语句创建⽤户的代码如下:
INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES
('hostname', 'username', PASSWORD('password'), '', '', '');
由于 mysql 数据库的 user 表中,ssl_cipher、x509_issuer 和 x509_subject 这 3 个字段没有默认值,所以向 user 表插⼊新记录时,⼀定要设置这 3 个字段的值,否则 INSERT 语句将不能执⾏。
例 3
下⾯使⽤ INSERT 语句创建名为 test2 的⽤户,主机名是 localhost,密码也是 test2。SQL 语句和执⾏过程如下:
mysql> INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES
('localhost', 'test2', PASSWORD('test2'), '', '', '');
Query OK, 1 row affected, 1 warning (0.02 sec)
结果显⽰,新建⽤户成功。但是这时如果通过该账户登录 MySQL 服务器,不会登录成功,因为 test2 ⽤户还没有⽣效。
可以使⽤ FLUSH 命令让⽤户⽣效,命令如下:
FLUSH PRIVILEGES;
使⽤以上命令可以让 MySQL 刷新系统权限相关表。执⾏ FLUSH 命令需要 RELOAD 权限。
注意:user 表中的 User 和 Host 字段区分⼤⼩写,创建⽤户时要指定正确的⽤户名称或主机名。
3. 使⽤GRANT语句新建⽤户
虽然 CREATE USER 和 INSERT INTO 语句都可以创建普通⽤户,但是这两种⽅式不便授予⽤户权限。于是 MySQL 提供了 GRANT 语句。
使⽤ GRANT 语句创建⽤户的基本语法形式如下:
GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
其中:
priv_type 参数表⽰新⽤户的权限;
database.table 参数表⽰新⽤户的权限范围,即只能在指定的数据库和表上使⽤⾃⼰的权限;
user 参数指定新⽤户的账号,由⽤户名和主机名构成;
IDENTIFIED BY 关键字⽤来设置密码;
password 参数表⽰新⽤户的密码。
例 4
下⾯使⽤ GRANT 语句创建名为 test3 的⽤户,主机名为 localhost,密码为 test3。该⽤户对所有数据库的所有表都有 SELECT 权限。SQL 语句和执⾏过程如下:
mysql> GRANT SELECT ON*.* TO 'test3'@localhost IDENTIFIED BY 'test3';
Query OK, 0 rows affected, 1 warning (0.01 sec)
其中,“*.*” 表⽰所有数据库下的所有表。结果显⽰创建⽤户成功,且 test3 ⽤户对所有表都有查询(SELECT)权限。
技巧:GRANT 语句是 MySQL 中⼀个⾮常重要的语句,它可以⽤来创建⽤户、修改⽤户密码和设置⽤户权限。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论