用户管理
登录MySQL
mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"
- -h参数 后面接主机名或者主机IP,hostname为主机,hostIP为主机IP。
- -P参数 后面接MySQL服务的端口,通过该参数连接到指定的端口。MySQL服务的默认端口是3306,不使用该参数时自动连接到3306端口,port为连接的端口号。
- -u参数 后面接用户名,username为用户名。
- -p参数 会提示输入密码。
- DatabaseName参数 指明登录到哪一个数据库中。如果没有该参数,就会直接登录到MySQL数据库中,然后可以使用USE命令来选择数据库。
- -e参数 后面可以直接加SQL语句。登录MySQL服务器以后即可执行这个SQL语句,然后退出MySQL
服务器。
mysql -uroot -p -hlocalhost -P3306 mysql -e "select host,user from user"
创建用户
CREATE USER 用户名 [IDENTIFIED BY '密码'][,用户名 [IDENTIFIED BY '密码']];
CREATE USER zhang3 IDENTIFIED BY '123123'; # 默认host是 %
修改用户
UPDATE mysql.user SET USER='li4' WHERE USER='zhang3';
FLUSH PRIVILEGES;
删除用户
DROP USER user[,user]…;
drop user li4;
默认删除host为%的用户
drop user zhang3@localhost;
修改当前用户密码
ALTER USER命令
ALTER USER USER() IDENTIFIED BY 'new_password';
SET语句
SET PASSWORD='new_password';
修改其他用户密码
使用ALTER语句来修改普通用户的密码
ALTER USER user [IDENTIFIED BY '新密码'] [,user[IDENTIFIED BY '新密码']]…;
使用SET命令来修改普通用户的密码
SET PASSWORD FOR 'username'@'hostname'='new_password';
权限管理
权限列表
MySQL具备的权限
show privileges;
- CREATE和DROP权限:可以创建新的数据库和表,或删除(移掉)已有的数据库和表。
- SELECT、INSERT、UPDATE和DELETE权限:允许在一个数据库现有的表上实施操作。
- SELECT权限:只有在它们真正从一个表中检索行时才被用到。
- INDEX权限:允许创建或删除索引,INDEX适用于已有的表。如果具有某个表的CREATE权限,就可以在CREATE TABLE语句中包括索引定义。
- ALTER权限:可以使用ALTER TABLE来更改表的结构和重新命名表。
- CREATE ROUTINE权限:用来创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序。
- EXECUTE权限:用来执行保存的程序。
- GRANT权限:允许授权给其他用户,可用于数据库、表和保存的程序。
- FILE权限:使用户可以使用LOAD DATA INFILE和SELECT … INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL服务器上的任何文件。
权限授予的原则
只授予能满足需要的最小权限
创建用户的时候 限制用户的登录主机 ,一般是限制成指定IP或者内网IP段。
为每个用户 设置满足密码复杂度的密码 。
定期清理不需要的用户 ,回收权限或者删除用户。
授予权限
两种方式
1、角色赋予用户给用户授予权限。
2、直接给用户授权。
授权命令
GRANT 权限1,权限2,…权限n ON 数据库名称.表名称 TO 用户名@用户地址 [IDENTIFIED BY ‘密码口令’];
授予zhangsan用户select和update权限
grant select,update on dbtest01.employees to zhangsan;
授予删除权限
grant delete on dbtest01.employees to zhangsan;
授予所有权限
grant all privileges on *.* to zhangsan;
查看权限
查看当前用户的权限
SHOW GRANTS;
# 或
SHOW GRANTS FOR CURRENT_USER;
# 或
SHOW GRANTS FOR CURRENT_USER();
查看某用户的全局权限
SHOW GRANTS FOR 'user'@'主机地址' ;
收回权限
REVOKE 权限1,权限2,…权限n ON 数据库名称.表名称 FROM 用户名@用户地址;
举例
# 收回所有权限
REVOKE ALL PRIVILEGES ON *.* FROM zhangsan@'%';
# 单独收回权限
revoke delete on dbtest01.employees from zhangsan@'%';
用户必须重新登录才能生效。