添加mysql的用户名和密码是什么语句?-kb88凯时官网登录

时间:2020-10-15
阅读:
免费资源网 - https://freexyz.cn/

mysql 在安装时,会默认创建一个名为 root 的用户,该用户拥有超级权限,可以控制整个 mysql 。

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

mysql 提供了以下 3 种方法来创建用户,添加用户名和密码。

  • 使用 create user 语句创建用户,添加用户名和密码。

  • 在 mysql.user 表中添加用户,添加用户名和密码。

  • 使用 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 时所用主机的名字。如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限。

2) identified by子句

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

3) 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 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 中一个非常重要的语句,它可以用来创建用户、修改用户密码和设置用户权限。教程后面会详细介绍如何使用 grant 语句修改密码、更改权限。

免费资源网 - https://freexyz.cn/
返回顶部
顶部
网站地图