MySQL数据库权限
用户建立
方法一:
使用插入语句进行用户的建立,不推荐使用
这三个字段ssl_cipher,x509_issuer,x509_subject没有默认值,用此方法建立新用户的时候不给这三个字段赋值会出现错误
user表的安全列有4个字段:
ssl_type;
ssl_cipher;
x509_issuer;
x509_subject;
ssl用于加密;
x509标准可以用来标识用户。
普通的发行版都没有加密功能。
可以使用
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关键字来为用户设置权限。
语法
案例
先建立用户,赋予插入与查询权限
查看用户权限,权限已经赋予
收回插入权限
再次查询权限,权限已经修改
移除所有权限
再次查询权限,没有任何权限