通过create user 命令来创建用户, 有两种方式:(只介绍通过 create user 命令, 直接往user表中插入数据的方式,这里就不说了)
创建用户的同时, 指定用户可登录的主机和密码
create user 'test_user'@'%' identified by "123";
create user 'test_user'@'localhost' identified by "123";
create user 'test_user'@'127.0.0.1' identified by "123";
grant all privileges on test_db.* to 'test_user'@'%';
grant select,update,delete,insert,drop on test_db.* to 'test_user'@'%';
grant all privileges on test_db.* to 'test_user'@'%' identified by '1112';
grant all privileges on test_db.* to 'test_user'@'%' with grant option;
首先解释一下创建用户的命令参数:
-
'test_user'
是用户名 -
@
后面是指定的登录主机,'localhost'
和'127.0.0.1'
表示只能在 本地登录;'%'表示只能在远程主机登录 -
identified by
后面是密码 - 友情提示: 上述命令中,用户名, 登录主机, 密码, 建议都使用 引号包起来, 防止不必要的麻烦
分配权限的命令参数:
-
grant
是分配权限的命令 -
all privileges
指所有的权限, 也可以像第二条那样, 指定某些权限给用户 -
test_db.*
表示 test_db库的所有表, 可以指定某个表test_db.table1
, 或者所有数据库的所有表,*.*
-
identified by
指定密码, 如果不指定, 默认用创建用户的时候的密码, 或者可以不同的权限,给不同的密码, 或者不同的登录主机给不同的密码, 都是可以的 -
with grant option
如果带着这个参数, 表示这个被分配权限的用户, 还可以把自己的权限分配给其他人 - 用grant语句创建权限是不需要再手工刷新授权表的,因为它已经自动刷新了。
上面前三条命令只能同时使用一条, 因为create user 不能创建同名的用户
那么问题就来了, 假设通过第一条命令创建了用户, 那么这个用户就只能在远程主机上登录, 而不能在本地登录, 如果在本地登录, 会报这个错误:ERROR 1045 (28000): Access denied for user 'card_test1'@'localhost' (using password: YES)
出现这个错误有很多种情况, 据我的了解, 可能是:
- 用户没有在本地登录的权限, 也就是
'card_test1'@'localhost'
这个用户不存在, 因为只存在'card_test1'@'%'
这个用户 - 密码不对
为了解决这个问题, 可以通过第二种方式, 也就是create user 的时候, 不分配登录主机这些参数
只创建用户, 不分配主机
1. create user test_user;
2. create user test_user identified by "123";
3. grant all privileges on test_db.* to 'test_user'@'%' identified by "1234";
4. grant all privileges on test_db.* to 'test_user'@'localhost'identified by "1235";
上面的命令, 1,2 执行一条, 单纯的创建用户, 或者同时分配密码;
然后, 3,4 两条都可以执行, 这样就能让test_user 这个用户, 既能在本地登录, 又能在远程登录, 如果 grant的时候, 设置不同的密码, 还能使在不同主机登录的同一个用户, 使用不同的密码
取消用户权限
使用 revoke
语句
revoke all on test_db.* from 'test_user'@'localhost';
这个命令就取消了 test_user 这个用户, 在本地登录时的全部权限
删除用户
drop user 'test_user'@'%';
drop user 'test_user'@'localhost';
修改指定用户的密码
update mysql.user set password=password('new_passwd') where User='test_user' and Host='%';
创建用户给用户创建权限或者修改权限, 都可以通过直接操作 mysql.user表; 注意直接操作表的话, 需要用
flush privileges;
命令 刷新权限