1.访问控制
-
MYSQL所有的用户账号信息都存储在一个名为MYSQL的数据库中,这个数据库里有一个名为user的数据表,其包含了所有的用户账号。如图
-
在对MYSQL的日常管理中,为避免恶意用户冒名顶替root账号操纵数据库,通常需要创建一系列具备适当权限的账号,而尽可能减少或者不用root账号登陆系统,以此来确保数据的安全访问。
mysql> select user from mysql.user; +------+ | user | +------+ | root | | root | | root | +------+ 3 rows in set
2.用户管理
2.1.创建用户账号
- 语法:
CREATE USER user_specification [,..]
- User_specification 的格式:
User IDENTIFIED BY [PASSWORD] ‘password’
| IDENTIFIED WITH auth_plugin [AS ‘auth_string’]
-
User: 指定创建的用户账号,其格式为 ’user_name’@’host_name’.这里的user_name是用户名, host_name 为主机名,即用户连接MYSQL时所在主机的名称。如果在创建过程中只给出账户中的用户名,而没指定主机名,则系统默认主机名为”%”,表示一组主机。
-
IDENTIFIED BY 子句: 用于指定用户账号对应的口令,若该账号无口令,则可省略此子句。
-
可选项PASSWORD: 用于指定散列口令,若口令为明文,则忽略PASSWORD关键字。
-
Password: 指定用户账号的口令,在IDENTIFIED BY 关键字或PASSWORD关键字之后,给定的口令值可以是字母和数字组成的明文, 也可以是通过PASSWORD()得到的散列值。
-
IDENTIFIED BY子句:用于指定验证账号的认证插件。
-
Auto_plugin: 制定认证插件的名称。
-
注意:
i. 使用创建用户的语句,需具备MYSQL的mysql数据库的INSERT权限或者全局CREATE USER 权限。
ii. 如果创建的用户已存在,则会报错
iii. 如果两个用户拥有相同的用户名和不同的主机名,MYSQL会视为他们为不同用户并允许为其分配不同的权限
iv. 新创建的用户拥有的权限极少,可登录MYSQL,可使用无需权限的操作。
j) 举例:
添加两个新用户,zhangsan和lisi,其主机名均为localhost。Zhangsan的口令为明文“123”, lisi的口令为对应明文“456”的散列值。
mysql> select password('456');
+-------------------------------------------+
| password('456') |
+-------------------------------------------+
| *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
+-------------------------------------------+
1 row in set
mysql> create user 'zs'@'localhost' identified by '123';
Query OK, 0 rows affected
mysql> select user from mysql.user;
+------+
| user |
+------+
| root |
| root |
| root |
| zs |
+------+
4 rows in set
2.2删除用户
a) DROP USER user[, user]….
b) 其可用于删除一个或者多个用户,并消除其权限
c) 在删除操作中,如果没有明确的给出账户的主机名,则该注聚名会被默认为%
d) 用户的删除不会影响到他们创建的表,索引,以及其他数据库对象,这是因为MYSQL并没有记录是谁创建了这些对象。
e) 举例:删除前面创建的对象
mysql> drop user zs@localhost;
Query OK, 0 rows affected
mysql> select user from mysql.user;
+------+
| user |
+------+
| root |
| root |
| root |
+------+
3 rows in set
2.3修改用户账号
- 语法:
RENAME USER old_nuser TO new_user [, …]
-
Old_user: 系统中已存在的MYSQL账号
-
c) New_user: 新的用户账号
-
d) 注意:
i. RENAME语句只用于对原有MYSQL账户进行重命名。
ii. 若要使用该语句,需具备对mysql数据库的UPDATE权限或者全局CREATE USER权限
iii. 倘若旧账户不存在或者新账户已存在,则语句执行会报错
e) 举例:将zs修改为ls
mysql> create user 'zs'@'localhost' identified by '123';
Query OK, 0 rows affected
mysql> select user from mysql.user;
+------+
| user |
+------+
| root |
| root |
| root |
| zs |
+------+
4 rows in set
mysql> rename user 'zs'@'localhost' to 'ls'@'localhost';
Query OK, 0 rows affected
mysql> select user from mysql.user;
+------+
| user |
+------+
| root |
| root |
| ls |
| root |
+------+
4 rows in set
2.4 修改用户口令
语法:
SET PASSWORD [FOR user] = PASSWORD (‘new_password’) | ‘encrypted password’
b) FOR子句:指定欲修改口令的用户。该子句为可选项,如不加该子句,则表示修改当前用户的口令。
c) PASSWORD (‘new_password’):表示用函数PASSWORD()设置新口令
d) Encrypted password: 表示已被函数PASSWORD加密过的口令值。
e) C与d只能选择一项,且必须选择一项进行修改口令