MySQL包括普通用户和root用户,root用户是超级管理员拥有所有权限
1> 新建用户
<1> 创建普通用户,语法格式 : CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] [,user [IDENTIFIED BY [PASSWORD] 'password']]...
mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';
创建指令用户名在其 @ 后指定的是访问地址,此处指定该用户 localhost 地址可以访问,要所有地址都可以访问使用 %
2> 删除用户
<1> 删除普通用户,语法格式 : DROP USER user [,user]...;
mysql> DROP USER 'test2'@'localhost';
3> root用户修改自己的密码,语法格式 : mysqladmin -u username -p password "new_password";
注 : 其中的 password 为关键字不是指旧密码,而且新密码必须用双引号括起来使用单引号会出现错误,如果使用单引号,可能造成修改后密码不是你想要修改的
mysql> mysqladmin -u root-p password "myroot1";
4> root用户修改普通用户密码,语法格式 : SET PASSWORD FOR 'username'@'hostname'=PASSWORD("new_password");
注 : 新密码必须使用PASSWORD()函数加密
mysql> SET PASSWORD FOR 'test3'@'hostname'=PASSWORD("mytest1");
通过修改用户表的方式修改用户密码
mysql> CREATE USER 'test'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.15 sec)
mysql> SELECT user,host FROM mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | % |
| test | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
5 rows in set (0.00 sec)
mysql> ALTER user 'test'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
5> 普通用户修改密码,语法格式 : SET PASSWORD=PASSWORD('new_password');
mysql>
SET PASSWORD=PASSWORD("test");
6>
各种权限
权限名称
|
对应 user 表中列
|
权限的范围
|
CREATE | Create_priv | 数据库、表或索引 |
DROP | Drop_priv | 数据库或表 |
GRANT OPTION | Grant_priv | 数据库、表、存储过程或函数 |
REFERENCES | References_priv | 数据库或表 |
ALTER | Alter_priv | 修改表 |
DELETE | Delete_priv | 删除表 |
INDEX | Index_priv | 用索引查询表 |
INSERT | Insert_priv | 插入表 |
SELECT | Select_priv | 查询表 |
UPDATE | Update_priv | 更新表 |
CREATE VIEW | Create_view_priv | 创建视图 |
SHOW VIEW | Show_view_priv | 查看视图 |
ALTER ROUTINE | Alter_routine_priv | 修改存储过程或存储函数 |
CREATE ROUTINE | Create_routine_priv | 创建存储过程或存储函数 |
EXECUTE | Execute_priv | 执行存储过程或存储函数 |
FILE | File_priv | 加载服务器主机上的文件 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 创建临时表 |
LOCK TABLES | Lock_tables_priv | 锁定表 |
CREATE USER | Create_user_priv | 创建用户 |
PROCESS | Process_priv | 服务器管理 |
RELOAD | Reload_priv | 重新加载权限表 |
REPLICAION CLIENT | Repl_client_priv | 服务器管理 |
REPLICAION SLAVE | Repl_slave_priv | 服务器管理 |
SHWO DATABASES | Show_db_priv | 查看数据库 |
SHUTDOWN | Shutdown_priv | 关闭服务器 |
SUPER | Super_priv | 超级权限 |
<1> 授权,语法格式:GRANT priv_type [(column_list)] ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password'] [,user [IDENTIFIED BY [PASSWORD] 'password']]... [WITH with_option [with_option]...] priv_type是权限类型,column_list是权限作用于哪些列上没有该参数时作用于整个表上,user是由用户名和主机构成,password是用户新密码
WITH 关键字后面带有一个或多个 with_option 参数,这个参数有 5 个选项 :
GRANT OPTION : 被授权的用户可以将这些权限赋予别的用户
MAX_QUERIES_PER_HOUR count : 设置每个小时可以允许执行 count 次查询
MAX_UPDATES_PER_HOUR count : 设置每个小时可以允许执行 count 次更新
MAX_CONNECTIONS_PER_HOUR count : 设置每小时可以建立 count 连接
MAX_USER_CONNECTIONS count : 设置每个用户可以同时具有的 count 个连接数
mysql> GRANT SELECT、UPDATE ON *.* TO 'test5'@'localhost' IDENTIFIED BY 'test5' WITH GRANT OPTION;
mysql> grant all privileges on *.* to 'alex'@'%' identified by '123456' with grant option;
all privileges : 表示将所有权限授予给用户。也可指定具体的权限,如 : SELECT、CREATE、DROP等
on : 表示这些权限对哪些数据库和表生效,格式 : 数据库名.表名,这里写“*”表示所有数据库,所有表。如果要指定将权限应用到test库的user表中,可以这么写 : test.user
to : 将权限授予哪个用户,格式 : ”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如 : ”alex”@”192.168.0.%”,表示alex这个用户只能在 192.168.0IP段登录
identified by : 指定用户的登录密码
with grant option : 表示允许用户将自己的权限授权给其它用户
7> 回收权限,语法格式 : REVOKE priv_type [(column_list)]... ON database.table FROM user [,user] ...
回收全部权限的语法格式 : REVOKE ALL PRIVILEGES,GRANT OPTION FROM user [,user]...
mysql> REVOKE UPDATE ON *.* FROM 'test5'@'localhost';
mysql>
REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'test5'@'localhost';
8> 查看权限,语法格式 : SELECT * FROM mysql.user;
mysql> SELECT user,host FROM mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)
mysql> SHOW GRANTS FOR 'username'@'hostname';
mysql> SHOW GRANTS FOR 'root'@'localhost'
9> 刷新权限 : 对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库
mysql> flush privileges;