国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > 数据库应用 > MySql-权限管理

MySql-权限管理

来源:程序员人生   发布时间:2016-06-03 08:13:37 阅读次数:4153次

在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有:

  1. user表
  2. db表
  3. host表
  4. table_priv表
  5. columns_priv表
  6. proc_priv表

MySQL存取控制包括2个阶段:
阶段1:服务器检查你是不是允许连接。
这里写图片描述

阶段2:假定你能连接,服务器检查你发出的每一个要求。看你是不是有足够的权限实行它。例如,如果你从数据库中1个表精选(select)行或从数据库抛弃1个表,服务器肯定你对表有select权限或对数据库有drop权限。
这里写图片描述

服务器在存取控制的两个阶段使用在mysql的数据库中的user、db和host表表示,
表名称 user db host
范围字段 Host Host Host
User Db Db
Password User

表名称 user db host
范围字段 host,use,password host,db,user host,db

权限的键以 _priv 结尾:
这里写图片描述

使用GRANT语句创建新用户
GRANT USER语句可以用来创建帐户,通过该语句可以在user表中添加1条新记录
比起CREATE USER语句创建的新用户,还需要使用GRANT语句

赋予用户权限
使用GRANT语句创建新用户时必须有GRANT权限。
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] …
ON [object_type] {tbl_name | * | . | db_name.*}
TO user [IDENTIFIED BY [PASSWORD] ‘password’]
[, user [IDENTIFIED BY [PASSWORD] ‘password’]] …
[REQUIRE
NONE |
[{SSL| X509}]
[CIPHER ‘cipher’ [AND]]
[ISSUER ‘issuer’ [AND]]
[SUBJECT ‘subject’]]
[WITH with_option [with_option] …]

使用GRANT语句创建1个新用户testUser,密码为testpwd,并授与用户对所有数据表的SELECT和UPDATE权限

GRANT SELECT ,UPDATE ON *.* TO 'testUser'@'localhost' identified BY 'testpwd' SELECT `Host` ,`User` ,`Select_priv` ,`Update_priv` FROM mysql.user WHERE `User` ='testUser';

履行结果显示履行成功,使用SELECT语句查询用户testUser的权限
Select ‘Host’,’User’,’Select_priv’,’Update_priv’ from mysql user where ‘User’ = ‘testUser’;

root用户密码丢失的解决办法
使用–skip-grant-tables选项启动MYSQL服务
使用–skip-grant-tables选项启动MYSQL时,服务器将不加载权限判断,任何用户都能访问数据库

LINUX下
使用mysqld_safe来启动MYSQL服务,也能够使用/etc/init.d/mysql命令来启动mysql

mysqld_safe --skip-grant-tables user=mysql

/etc/init.d/mysql start-mysqld --skip-grant-tables

启动MYSQL服务后,就能够使用root用户登录了

权限管理
MYSQL中的各种权限
对GRANT和REVOKE语句,priv_type可以被指定为以下任何1种:

权限 意义
ALL [PRIVILEGES] 设置除GRANT OPTION以外的所有简单权限
ALTER 允许使用ALTER TABLE
ALTER ROUTINE 更改或取消已存储的子程序
CREATE 允许使用CREATE TABLE
CREATE ROUTINE 创建已存储的子程序
CREATE TEMPORARY TABLES 允许使用CREATE TEMPORARY TABLE
CREATE USER 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW 允许使用CREATE VIEW
DELETE 允许使用DELETE
DROP 允许使用DROP TABLE
EXECUTE 允许用户运行已存储的子程序
FILE 允许使用SELECT…INTO OUTFILE和LOAD DATA INFILE
INDEX 允许使用CREATE INDEX和DROP INDEX
INSERT 允许使用INSERT
LOCK TABLES 允许对您具有SELECT权限的表使用LOCK TABLES
PROCESS 允许使用SHOW FULL PROCESSLIST
REFERENCES 未被实行
RELOAD 允许使用FLUSH
REPLICATION CLIENT 允许用户询问从属服务器或主服务器的地址
REPLICATION SLAVE 用于复制型从属服务器(从主服务器中读取2进制日志事件)
SELECT 允许使用SELECT
SHOW DATABASES SHOW DATABASES 显示所有数据库
SHOW VIEW 允许使用SHOW CREATE VIEW
SHUTDOWN 允许使用mysqladmin shutdown
SUPER 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(1次),即便已到达max_connections。
UPDATE 允许使用UPDATE
USAGE “无权限”的同义词
GRANT OPTION 允许授与权限

当从旧版本的MySQL升级时,要使用EXECUTE, CREATE VIEW, SHOW VIEW, CREATE USER, CREATE ROUTINE和ALTER ROUTINE权限

授权
授权就是为某个用户授与权限
授与的权限可以分为多个层级:
全局层级
全局权限适用于1个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON .和REVOKE ALL ON .只授与和撤消全局权限。
数据库层级
数据库权限适用于1个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ONdb_name.和REVOKE ALL ON db_name.只授与和撤消数据库权限。
表层级
表权限适用于1个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授与和撤消表权限。
列层级
列权限适用于1个给定表中的单1列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
子程序层级
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授与为全局层级和数据库层级。而且,除CREATE ROUTINE外,这些权限可以被授与为子程序层级,并存储在mysql.procs_priv表中。

当后续目标是1个表、1个已存储的函数或1个已存储的进程时,object_type子句应被指定为TABLE、FUNCTION或PROCEDURE。当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权表

收回权限
收回权限就是取消已赋予用户的某些权限。收回用户没必要要的权限可以在1定程度上保证系统的安全性。
使用REVOKE收回权限以后,用户帐户的记录将从db、host、tables_priv、columns_priv表中删除,但是用户帐号记录仍然
在user表中保存。

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] {tbl_name | * | *.* | db_name.*} FROM user [, user] ... REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

使用REVOKE语句,必须具有mysql数据库的全局CREATE权限或UPDATE权限
使用REVOKE语句取消用户grantUser的INSERT权限

REVOKE INSERT ON *.* FROM 'grantUser'@'localhost';

注意:当从旧版本的MYSQL升级时,如果要使用EXECUTE、CREATE VIEW、SHOW VIEW、CREATE USER、CREATE ROUTINE、ALTER ROUTINE权限,必须先升级授权表

查看权限
SHOW GRANT语句可以显示用户的权限信息

show grants FOR 'user'@'host';
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生