MySQL权限操作

MySQL数据库权限

用户建立

方法一:

使用插入语句进行用户的建立,不推荐使用

这三个字段ssl_cipher,x509_issuer,x509_subject没有默认值,用此方法建立新用户的时候不给这三个字段赋值会出现错误

user表的安全列有4个字段:

ssl_type;

ssl_cipher;

x509_issuer;

x509_subject;

ssl用于加密;

x509标准可以用来标识用户。

扫描二维码关注公众号,回复: 5938425 查看本文章

普通的发行版都没有加密功能。

可以使用

SHOW VARIABLES LIKE 'have_openssl'

语句来查看是否具有ssl功能。

如果取值为DISABLED,那么则没有ssl加密功能。

mysql中user表各字段的含义:

方法二:

使用CREATE USER语句创建用户,必须要拥有CREATE USER权限。其格式如下:

CREATE USER user[IDENTIFIED BY [PASSWORD] 'password'],
[user[IDENTIFIED BY [PASSWORD] 'password']]...

其中,user参数表示新建用户的账户,user由用户名(User)和主机名(Host)构成;IDENTIFIED BY关键字用来设置用户的密码;password参数表示用户的密码;如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。可以没有初始密码。

 

方法三:

语法

grant all privileges on *.* to 'alex'@'%' identified by '123456' with grant option;

all privileges

表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。

on

表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user

to

将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。

比如:”alex”@”192.168.0.%”,表示alex这个用户只能在192.168.0IP段登录

 identified by:指定用户的登录密码

 with grant option:表示允许用户将自己的权限授权给其它用户

%为登录地点为任意地点,可以写定ip地址

 

可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。

 

用户信息修改

修改登录名:

语法:rename user '旧登录名'@'%' to '新登录名'@'%';

 

修改密码:

方法1:在mysql中使用命令修改密码

#修改密码1

 UPDATE USER SET PASSWORD=PASSWORD('新密码') WHERE USER='用户';

 #修改密码2

 SET PASSWORD FOR '用户'@'%'=PASSWORD('新密码');

%是登录的地址

 

方法2:在cmd控制台下修改密码

mysqladmin -u用户名 -p旧的密码 password 新密码

 

用户删除

方法一

DROP USER语句删除普通用户

  需要拥有DROP USER权限。语法如下:

DROP USER user[,user]...

  user是需要删除的用户,由用户名(User)和主机名(Host)构成。

DROP USER 'newuser1'@'%'

 

方法二

DELETE语句删除普通用户

  可以使用DELETE语句直接将用户的信息从mysql.user表中删除。但必须拥有对mysql.user表的DELETE权限。

DELETE FROM mysql.user WHERE Host = '%' AND User = 'admin'

  删除完成后,一样要FLUSH PRIVILEGES才生效。

 

方法三:

直接打开mysql数据库中的user表进行删除,借助mysql管理工具来实现。

权限管理

数据库各种权限

数据库权限分类:

 

全局层级

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。

GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。

案例:

 

数据库层级

数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。

案例

不能建立数据库

 

表层级

表权限适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。

案例

只能对该表操作,不能建立表

列层级 

列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。

只能对列操作,不能删除列,删除列属于表层级权限

 

案例

只有固定列的权限,无法查询所有数据

子程序级:存储过程

CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。

案例

关于execute的用法,见下链接:详情

查看用户权限

 

方法一

show grants for test;

方法二

select * from mysql.user where user='test'\G;

修改用户权限

增加用户权限

语法

  • priv_type参数表示权限类型;
  • column_list:参数表示权限作用于哪些列上,没设置则位于整个表上;
  • user参数由用户名和主机名构成;形式是"'username'@'hostname'"
  • IDENTIFIED BY参数用于为用户设置密码;
  • password:用户新密码;

  WITH关键字后面带有一个或多个with_option参数。有5个选项:

  • GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;
  • MAX_QUERIES_PER_HOUR count:设置没消失可以允许执行count次查询;
  • MAX_UPDATES_PER_HOUR count:设置每个消失可以允许执行count次更新;
  • MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立count个连接;
  • MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的count个连接数;

案例:

查看用户权限

 

此时看不到任何数据库,也没有任何权限,执行其他操作会报错

 

赋予用户admin查询,插入my_test数据库的权限

此时执行查询操作不会出错

权限表中所有的权限都可以被赋予

 

收回用户权限

收回权限,就是取消某个用户的某些权限。MySQL中使用REVOKE关键字来为用户设置权限。

语法

案例

先建立用户,赋予插入与查询权限

查看用户权限,权限已经赋予

收回插入权限

再次查询权限,权限已经修改

移除所有权限

再次查询权限,没有任何权限

 

 

猜你喜欢

转载自blog.csdn.net/h1025372645/article/details/89366169
今日推荐