SQL 用户管理和授权

一.MySQL权限分类

  1. mysql.user   全局权限
  2. mysql.db  只能操作某个数据库
  3. mysql.table_priv  只能操作某个表
  4. mysql.columns  只能对某个列进行操作

二.查看用户权限

 show grants;        -- 查询当前用户权限  

grants  for root@localhost; --查询用户root的权限

三.用户管理

1.查询用户  (以root身份登录)

use mysql;                -- 系统数据库

select * from user;     -- 用户都在mysql.user表

2.创建用户

(1)使用CREATE USER语句创建用户

create user ‘用户名’@’主机名’ identified by ‘密码’;

#没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限

(2)使用INSERT语句新建用户

当拥有对mysql.user表的INSERT权限后,可使用INSERT语句将用户的信息添加到mysql.user表中。

INSERT INTO mysql.user(Host, User, authentication_string,...) VALUES ('hostname', 'username','password',....);

#通常INSERT语句只添加Host、User和authentication_string这3个字段的值

注意:如果通过该账户登录MySQL服务器,不能成功,是因为新创建的用户还没有生效。可以使用FLUSH命令让用户生效,命令如下: FLUSH PRIVILEGES;

3.删除用户

语法格式如下:

DROP USER  ‘用户名’@’主机名’;

delete from mysql.user WHERE Host='hostname' AND User='username';

#delete使用时需用户拥有mysql.user表的DELETE权限才能进行

4.修改用户名

rename ‘旧用户名’@’主机名’  to   ‘新用户名’@’主机名’

5.修改用户密码

alter user ‘用户名’@’主机名’ indentified  by ‘新密码’;

四.权限管理

1.查看用户权限

show grants for ‘用户名’@‘主机名’ ;

2.授予用户权限

GRANT PRIVILEGES ON DATABASE.TABLE TO "用户名"@"主机名";

  • PRIVILEGES代表要赋予用户的权限
  • DATABASE是数据库名,可以用*代表所有的数据库
  • TABLE是数据表名,可以用*代表所有的数据表
  • “用户名”和“主机名”标识要授权的登陆用户

3.删除用户权限

revoke 权限列表 on 对象类型 对象名 from ‘用户名’@’主机名’..... ;

案例

1.建立用户admin,密码"123456",在所有机器上均可登录 对所有数据库的数据表都有权限

 #建立用户
create user 'admin' identified by '123456';

 #用户授权
grant all on *.* to 'admin' identified by '123456' with grant option;

 #测试
 select host,user,Update_priv,Alter_priv from mysql.user where user='admin' ;

2.建立用户user,密码为888888,在本机(172.0.0.1)登录,对province数据库的jdxx数据表有查询权限

use province;
 #建立用户
create user 'user'@'172.0.0.1' identified by '888888';

 #用户授权
 grant select on table jdxx to 'user'@'172.0.0.1';
 
 #代码结束
select host,db,table_name,Table_priv   from mysql.tables_priv  where  user='user';

3.建立用户user,在本机(172.0.0.1)登录,密码为666666.对数据库province库的所有数据表有所有的权限,对数据库library库的book表有查询的权限


#代码开始
#建立用户
create user 'user' @'172.0.0.1' identified by '666666';
#用户授权
grant all on province.* to 'user'@'172.0.0.1';
grant select on library.book to 'user'@'172.0.0.1';


 #代码结束
select host,db,user,Delete_priv,Index_priv from mysql.db where user='user' ;
select host,db,table_name,Table_priv   from mysql.tables_priv  where  user='user';

table_priv表结构如下图

猜你喜欢

转载自blog.csdn.net/m0_62428181/article/details/128007580