如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。
在mysql中,所有的用户信息都是存储在 mysql 库中的 uesr 表中的
mysql> select host,user,authentication_string from user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *323BFBD7123A3A05DA4B9CB7BC6AB9DE2E8387A1 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
语法:
create user '用户名'@'登陆主机/ip' identified by '密码';
当我们在创建的过程中如果遇到了这样的问题
The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement。
先不要慌,这是因为MySQL 服务器正在使用 “–skip-grant-tables” 选项运行,该选项会绕过权限验证,因此无法执行创建用户的语句。为了解决这个问题,您需要先关闭 “–skip-grant-tables” 选项,然后再创建用户。
步骤为:
要关闭 "--skip-grant-tables" 选项,请按照以下步骤操作:
1.使用管理员权限登录到 MySQL 服务器
2.运行以下命令进入 MySQL 命令行界面:
mysql -u root -p
3.输入 MySQL 的管理员密码,进入 MySQL 命令行界面
4.运行以下命令关闭 "--skip-grant-tables" 选项:
mysql> FLUSH PRIVILEGES;//有时候这一步操作完成后就可以进行创建了
mysql> SET GLOBAL skip_grant_tables=0;
mysql> FLUSH PRIVILEGES;
5.然后就可以创建用户了,例如:
mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
mysql> FLUSH PRIVILEGES;
另外还有一个错误就是
-- 此时便可以使用新账号新密码进行登陆啦--备注:可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置,会爆出
如下报错:-- ERROR 1819 (HY000): Your password does not satisfy the current policy
requirements-- 解决方案:https://blog.csdn.net/zhanaolu4821/article/details/93622812--查看密码设置相关要求:SHOW VARIABLES LIKE 'validate_password%'; -- 这个大家下来自己玩玩--关于新增用户这里,需要大家注意,不要轻易添加一个可以从任意地方登陆的user。
当我们创建成功后,我们就可以使用我们创建的用户进行密码登录了
mysql> create user 'wh'@'localhost' identified by 'wh123321';
Query OK, 0 rows affected (0.00 sec)
全局权限的用户创建
语法:
drop user '用户名'@'主机名'
mysql> select user,host,authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user
| authentication_string
|
+---------------+-----------+-------------------------------------------+
| root
| *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys
| localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> drop user 'whb'@'localhost'; --删除用户
Query OK, 0 rows affected (0.00 sec)
| host
mysql> select user,host,authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user
| authentication_string
比特就业课
|
+---------------+-----------+-------------------------------------------+
| root
| %
| *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys
| localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
修改密码的方式有两种:一种为自己改自己的密码,另外一种是root用户修改指定用户的密码
set password=password('新的密码');
set password for '用户名'@'主机名'=password('新的密码');
我们可以看到修改前和修改后的加密方式的显示时不一样的
因为MySQL也是表,所以我们也可以使用表的修改操作进行更改密码
语法:
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
特定用户现有查看权限
备注:特定用户现有查看权限
mysql> show grants for 'whb'@'%';
+-----------------------------------------------+
| Grants for whb@%
|
+-----------------------------------------------+
| GRANT USAGE ON *.* TO 'whb'@'%'
|
| GRANT ALL PRIVILEGES ON `test`.* TO 'whb'@'%' |
+-----------------------------------------------+
2 rows in set (0.00 sec)
mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@%
|
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
*.*
: 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)库.*
: 表示某个数据库中的所有数据对象(表,视图,存储过程等)identified by
可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';