MySQL — 用户和权限管理(DCL)
一、用户管理
1. 查询用户
-- 切换到数据库mysql
USE mysql;
-- 查询user表
SELECT * FROM user;
2. 创建用户
CREATE user '用户名'@'主机名' IDENTIFIED BY '密码';
-
用户名:将创建的用户名
-
主机名:指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost,如果想让该用户可以
从任意远程主机登陆,可以使用通配符%
-
密码 :该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
例:
-- 创建 dahua 用户,只能在 localhost 这个服务器登录 mysql 服务器,密码为 123456
CREATE user 'dahua'@'localhost' IDENTIFIED BY '123456';
-- 创建 hua 用户可以在任何电脑上登录 mysql 服务器,密码为 123
CREATE user 'hua'@'%' IDENTIFIED BY '123';
3. 删除用户
DROP user '用户名'@'主机名';
例:
-- 删除用户dahua
DROP user 'dahua'@'localhost';
-- 删除用户hua
DROP user 'hua'@'%';
4. 修改用户密码
PASSWORD()
:MySQL中的密码函数
-- 第一种方式
UPDATE user SET password = password('新密码') WHERE user = '用户名'@'主机名';
-- 第二种方式(常用)
SET password FOR '用户名'@'主机名' = password('新密码');
例:
-- 修改用户dahua的密码为123
SET password FOR 'dahua'@'localhost' = PASSWORD('123')
5. MySQL中忘记root密码
-
停止MySQL服务
cmd:
net stop MySQL服务名
-
使用无验证方式启动MySQL服务
mysqld --skip-grant-tables;
-
在另一个cmd窗口使用
mysql
命令就可以进入 -
修改密码
USE mysql; UPDATE user SET password = PASSWORD('你的新密码') WHERE user = 'root';
-
关闭两个窗口
-
打开任务管理器,手动结束mysqld.exe 的进程
-
启动mysql服务:
net start mysql服务名
-
使用新密码登录。
6. 修改管理员密码
mysqladmin -uroot -p password;
- 将 root 管理员的新密码改成 123456
- 要求输入旧密码
- 使用新密码登录
例:
mysqladmin -uroot -p '123456';
-- 回车输入旧密码,修改完成
mysql -uroot -p123456; -- 登录MySQL
二、权限管理
1. 查询用户权限
SHOW GRANTS FOR '用户名'@'主机名';
2. 授予用户权限
-- 授予用户操作某个数据库的某张表指定的权限
GRANT 权限 1, 权限 2... ON 数据库名. 表名 TO ' 用户名'@' 主机名';
-- 授予用户所有数据库权限
GRANT ALL ON *.* TO '用户名'@'主机名';
权限:
授予用户的权限,如 CREATE、ALTER、SELECT、INSERT、UPDATE 等。
如果要授予所有的权限则使用 ALL
例:
-- 给 dahua 用户分配对 test 这个数据库操作的权限:创建表,修改表,插入记录,更新记录,查询
GRANT create,alter,insert,update,select ON test.* TO 'dahua'@'localhost';
-- 给 hua 用户分配所有权限,对所有数据库的所有表
GRANT ALL ON *.* to 'hua'@'%';
3. 撤销用户权限
REVOKE 权限 1, 权限 2... ON 数据库. 表名 FROM '用户名'@'主机名';
例:
-- 撤销 dahua 用户对 test 数据库所有表的操作的权限
REVOKE ALL ON test.* FROM 'dahua'@'localhost';