mysql学习笔记(2)

mysql访问权限系统

当mysqld服务器启动时,将授权表的内容读入到内存中

你可以通过以下三种方式刷新内存中的权限:

1. FLUSH PRIVILEGES语句

2. 执行mysqladmin flush-privileges

3. mysqladmin reload命令让它重新读取表

 

要检查给定账户的权限,使用SHOW GRANTS语句

mysql> SHOW GRANTS FOR '用户名'@'主机';

 

通过CREATEDROP权限,你可以创建新数据库和表,或删除(移掉)已有数据库和表

SELECTINSERTUPDATEDELETE权限允许你在一个数据库现有的表上实施操作

INDEX权限允许你创建或删除索引

通过ALTER权限,你可以使用ALTER TABLE来更改表的结构和重新命名表

GRANT权限允许你把你自己拥有的那些权限授给其他的用户

FILE权限给予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读和写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL服务器能读或写的任何文件

需要CREATE ROUTINE权限来创建保存的程序(函数和程序),ALTER ROUTINE权限来更改和删除保存的程序,EXECUTE来执行保存的程序

拥有REPLICATION CLIENT权限便可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS

REPLICATION SLAVE权限应授予从服务器所使用的将当前服务器连接为主服务器的账户

拥有SHOW DATABASES权限便允许账户使用SHOW DATABASE语句来查看数据库名

拥有CREATE TEMPORARY TABLES权限便可以使用CREATE TABLE语句中的关键字TEMPORARY

拥有LOCK TABLES权限便可以直接使用LOCK TABLES语句来锁定你拥有SELECT权限的表。包括使用写锁定,可以防止他人读锁定的表

一般赋给用户SELECTINSERTUPDATEDELETE权限

 

服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接 MySQL不允许匹配以数字和一个点起始的主机名

通配符字符在User列中不允许,但是你能指定空的值,它匹配任何名字 Password列可以是空的

到来的连接中的客户端名和用户名可能与user表中的多行匹配,如果有多个匹配,服务器必须选择使用哪个条目。按照下述方法解决问题:  

服务器在启动时读入user表后进行排序  

然后当用户试图连接时,以排序的顺序浏览条目  

服务器使用与客户端和用户名匹配的第一行

当服务器读取表时,它首先以最具体的Host值排序 当客户端试图连接时,服务器浏览排序的条目并使用找到的第一匹配

 

可以使用SELECT CURRENT_USER();确认当前连接的方式

 

db和host表在服务器启动时被读取并排序(同时它读user表)

db表在Host、Db和User范围列上排序,并且host表在Host和Db范围列上排序

对于user表,首先根据最具体的值最后根据最不具体的值排序,并且当服务器寻找匹配条目时,它使用它找到的第一匹配

 

前面关于用户权限如何计算的描述可以这样总结:

global privileges

OR (database privileges AND host privileges)

OR table privileges

OR column privileges

 

如果你手动地修改授权表(使用INSERT、UPDATE或DELETE等等),你应该执行mysqladmin flush-privilegesmysqladmin reload告诉服务器再装载授权表, 否则你的更改将不会生效,除非你重启服务器。

 

如果你使用SET PASSWORD、INSERT或UPDATE更改密码,你必须使用  PASSWORD()函数加密密码

SET PASSWORD FOR 'abe'@'host_name' = PASSWORD('eagle');

 

当你使用GRANT或CREATE USER语句或mysqladmin password命令指定密码时,不需要PASSWORD()函数,它们会自动使用PASSWORD()来加密密码

posted @ 2013-02-07 10:39  独孤侠  阅读(127)  评论(0编辑  收藏  举报