MySQL访问权限系统

MySQL访问权限系统

1、权限系统的作用:

  MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE权限。

  附加的功能包括有匿名的用户并对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。


2、权限系统工作原理:

  保证所有用户执行允许做的事情,当连接MySQL服务器时,你的身份由你从那儿连接的主机和你指定的用户名来决定。后发出请求后,

  系统根据你的身份和你想做什么来授予权限。MySQL在认定身份中考虑你的主机名和用户名字。不同IP的相同用户不一定是同一个权限集。


MySQL存取控制包含2个阶段

阶段1:服务器检查是否允许你连接。

   阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。

如果连接时你的权限被更改了,这些更改不一定立即对你发出的下一个语句生效。有可能需要你FLUSH PRIVILEGES。

服务器在mysql数据库的 授权表中保存权限信息。当MySQL服务器启动时将这些表的内容读入内存,并且从此时生效。访问控制决策取决于内存中的授权表的份数。

3、授权命令:

   GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';

GRANT USAGE ON *.* TO 'dummy'@'localhost';

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* TO 'custom'@'whitehouse.gov' IDENTIFIED BY 'obscure';


解释最后一条赋权语句:

给数据库 expenses 赋予 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 的权限,但是只限于custom在whitehouse.gov域内登陆

另外可以用insert语句代替该赋值语句

第一步:INSERT INTO user (Host,User,Password) VALUES('whitehouse.gov','custom',PASSWORD('obscure'));----给user表插入用户

第二步:INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)

                   VALUES('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');

给db表插入 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP的权限

第三步:FLUSH PRIVILEGES; 这一步必须。

另外用grant 赋权限密码可以直接用明文字符串或者数字,用insert插入语句必须PASSWORD()函数显式的加密字符串。

4、总结:

   user表在全局基础上授予赋予你的权限。db和host(host表权限有待研究)表授予数据库特定的权限。

======================补记===================:

如果在user表中全局权限不够,服务器通过检查db和host表确定特定的用户数据库权限:

  1. 服务器在db表的Host、Db和User列上查找匹配。Host和User对应连接用户的主机名和MySQL用户名。Db列对应用户想要访问的数据库。如果没有Host和User的行,访问被拒绝。

  2. 如果db表中有匹配的行而且它的Host列不是空的,该行定义用户的数据库特定的权限。

  3. 如果匹配的db表的行的Host列是空的,它表示host表列举被允许访问数据库的主机。在这种情况下,在host表中作进一步查找以发现Host和Db列上的匹配。如果没有host表行匹配,访问被拒绝。如果有匹配,用户数据库特定的权限以在db和host表的行的权限,即在两个行都是'Y'的权限的交集(而不是并集!)计算。(这样你可以授予在db表行中的一般权限,然后用host表行按主机主机为基础有选择地限制它们。)

在确定了由db和host表行授予的数据库特定的权限后,服务器把他们加到由user表授予的全局权限中。如果结果允许请求的操作,访问被授权。否则,服务器检查在tables_priv和columns_priv表中的用户的表和列权限并把它们加到用户权限中。基于此结果允许或拒绝访问。


用布尔术语表示,前面关于用户权限如何计算的描述可以这样总结:

global privileges
OR (database privileges AND host privileges)
OR table privileges
OR column privileges

摘自MySQL手册

你可能感兴趣的:(mysql,权限,访问权限)