1.用户授权
mysql> grant all privileges on *.* to 'user'@'%' identified by 'user123456' with grant option;
- 关键字 描述
- 1、all privileges 表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
- 2、on 表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的data表中,可以这么写:test.data。
- 3、to 将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”user”@”192.168.0.%”,表示user这个用户只能在192.168.0IP段登录。
- 4、identified by 定用户的登录密码。
- 5、with grant option 表示允许用户将自己的权限授权给其它用户,不过不建议使用,最好是管理员统一分配权限。
1.1权限分配具体使用
```sql
grant select on *.* to user@localhost; -- user可以查询 MySQL 中所有数据库中的表。
grant all on *.* to dba@localhost; -- user可以管理 MySQL 中的所有数据库
grant select on testdb.* to dba@localhost; -- user可以查询 testdb 中的表。
grant select, insert, update, delete on test.data to user@localhost; -- 给与user用户test数据库data表的CURD权限
--这里在给一个用户授权多张表时,可以多次执行以上语句。例如下面两句:
grant select(user_id,username) on test.data to user@'%' identified by '123345';
grant select on test.dataInfo to user@'%' identified by '123345';
--grant 作用在表中的列上
grant select(datasetId, datasetScore) on test.dataInfo to user@localhost;
```
1.2 权限可以叠加
可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。
2.刷新权限
mysql> flush privileges;
对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。
3.查看权限
mysql> show grants for 'user'@'localhost';
查看本地user用户权限
4.收回权限
mysql> revoke create on *.* from 'user@localhost';
mysql> flush privileges;
删除user这个用户的create权限,该用户将不能创建数据库和表。revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。
5.MySQL权限设置
5.1权限表
```tex
mysql数据库中的3个权限表:user 、db、 host
权限表的存取过程是:
1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证;
2)通过权限验证,进行权限分配时,按照useràdbàtables_privàcolumns_priv的顺序进行分配。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
```
具体每一个权限的作用请看 https://www.cnblogs.com/Csir/p/7889953.html