一、添加用户
1.直接在MYSQL.USER表插入记录
mysql> use mysql;
Database changed
mysql> INSERT INTO user(host, user, authentication_string, select_priv, create_priv,index_priv) VALUES ('localhost', 'user', PASSWORD('user'), 'Y', 'Y', 'Y');
mysql> FLUSH PRIVILEGES;
注意1:在MySQL5.7之前,存储密码的字段不是authentication_string
而叫password
。
注意2:PASSWORD()
函数是加密函数,明文密码会被加密后存放进user表。
注意3:FLUSH PRIVILEGES
用于重新载入授权表,否则需要重启mysql服务修改才会生效。
实际上,采用这种方式新建用户会报错:
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
字面上理解是一个叫ssl_cipher
的字段不能为null,但是没有插入值也没有默认值。
实际上在5.1版本后官方就禁止了这种创建用户的方式,在配置文件my.ini中被默认指定为严格模式。
解决方案是在配置文件中添加一条:
sql_mode=NO_ENGINE_SUBSTITUTION
不过既然官方禁止这样的方式,不建议使用此方法创建新用户。
2.使用CREATE USER命令
CREATE USER 'username'@'host' IDENTIFIED BY 'PASSWORD' ;
或者不要引号,像这样:
CREATE USER username@host IDENTIFIED BY 'PASSWORD' ;
也可以没有IDENTIFIED BY 'password'
部分,这样的话会生成无密码的账户。
注意:这样生成的账户只能连接数据库,无任何操作权限,需要后续的的GRANT命令来授权。
3.使用GRANT命令
当数据库存在用户时GRANT命令会对该用户进行授权,但当数据库不存在该用户时就会创建该用户并授权。
换句话说,上面的CREATE USER命令有点多余-。-
mysql> GRANT ALL|priv1,priv2,.....privn ON database.table to 'username'@'host' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
说明:priv代表权限,权限有如下几项:
- select
- insert
- update
- delete
- create
- drop
- index
- alter
- grant
- references
- reload
- shutdown
- process
- file
等
二、修改用户
1.修改用户名
UPDATE mysql.user SET user='user_rua' WHERE user='user';
或
RENAME USER 'user_rua'@'10.40.20.%' TO 'user'@'%';
注意:%是通配符,表示所有地址均可访问,也可限定网段,如10.40.20.%。这里RENAME
的同时,也修改了user表里的host,允许访问的网络地址也随即变了。
2.修改密码
UPDATE mysql.user SET authentication_string=PASSWORD('user') WHERE user='user';
或
SET PASSWORD FOR 'user'@'%'=PASSWORD('123456');
修改当前登录账户的密码可以更简单:
SET PASSWORD=PASSWORD('new_password');
另外,在命令提示符界面也可以直接修改密码:
mysqladmin -u root -p password 123456
123456为新密码,打入此命令后需要输入原密码。正确输入后密码会被修改。
3.收回权限
REVOKE ALL|priv1,priv2,.....privn ON *.* FROM 'username'@'host';
赋予权限见上面的GRANTS部分。
三、删除用户
DROP USER 'username'@'host';
或
DELETE FROM mysql.user WHERE user='user' AND host='localhost';
另、补充项
查看权限
查看当前登录用户的权限可以直接:
SHOW GRANTS;
或者查看其他用户的权限
SHOW GRANTS FOR 'username'@'host';
查看当前用户
SELECT USER();