5.7.3. MySQL提供的权限

账户权限信息被存储在mysql 数据库的userdbhosttables_privcolumns_priv procs_priv 表 中。在MySQL 启动时并在5.7.7节,“权限更改何时生效” 所 说的情况时,服务器将这些数据库表内容读入内存。

GRANTREVOKE 语句所用的涉及权限的名称显示在下表,还有在授权表中每个权 限的表列名称和每个权限有关的上下文。关于每个权限的含义相关的详细信息参见13.5.1.3节,“GRANT和REVOKE语法” 。

5.7.3. MySQL提供的权限_第1张图片

当从早期的没有CREATE VIEWSHOW VIEWCREATE ROUTINEALTER ROUTINEEXECUTE 权限的版本的MySQL 中升级时,要想使用这 些权限,你必须使用MySQL 分发提供的mysql_fix_privilege_tables 脚 本升级 授权表。参见2.10.2节,“升级授权表” 。

如果启用了二进制记录,要想创建或修改保存的程序,你还需要SUPER 权限,详细描述见20.4节,“存储子 程序和触发程序的二进制日志功能” 。

通过CREATEDROP 权限,你可以创建新数据库和表,或删除( 移 掉) 已有数据库和表。如果你将 mysql 数 据库中的 DROP 权限授予某用户,用 户可以删掉MySQL 访问权限保存的数据库。

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

SELECT 语句只有在他们真正从一个表中检索行时才需要SELECT 权限。一些SELECT 语 句不访问表,甚至没有任何到服务器上的数据库里的存取任何东西的许可。例如,你可使用mysql 客 户端作为一个简单的计算器来评估未引用表的表达式:

mysql> 
SELECT 1+1; 

mysql> 
SELECT PI()*2; 

INDEX 权限允许你创建或删除索引。INDEX 适用已有表 如 果你具有某个表的CREATE 权限,你可以在CREATE TABLE 语句中包括索引定义。

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

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

GRANT 权限允许你把你自己拥有的那些权限授给其他的用户。可以用于数据库、表和保存的程序。

FILE 权限给予你用LOAD DATA INFILESELECT ... INTO OUTFILE 语句读和写服务器上的文件,任何被授予FILE 权限的用户都能读或写MySQL 服务器能读或写的任何文件。( 说 明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件) FILE 权限允许用户在MySQL 服务器具有写权限的目录下创建新文件。不能 覆盖已有文件。

其余的权限用于管理性操作,它使用mysqladmin 程序或SQL 语 句实施。下表显示每个管理性权限允许你执行的mysqladmin 命令:

5.7.3. MySQL提供的权限_第2张图片

reload 命令告诉服务器将授权表重新读入内存。flush-privilegesreload 的 同义词,refresh 命令清空所有表并打开并关闭记录文件,其它flush-xxx 命 令执行类似refresh 的功能,但是范围更有限,并且在某些情况下可能更好用。例如,如果你只是想清空记录文件,flush-logsrefresh 是 更好的选择。

shutdown 命令关掉服务器。只能从mysqladmin 发 出命令。没有相应的SQL 语句。

processlist 命令显示在服务器内执行的线程的信息(即其它账户相关的客户端执行的语句)。 kill 命 令杀死服务器线程。你总是能显示或杀死你自己的线程,但是你需要 PROCESS 权限来显示或杀死其 他用户和 SUPER 权限启动的线程。 参见13.5.5.3节,“KILL语法” 。

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

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

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

REPLICATION SLAVE 权限应授予从服务器所使用的将当前服务器连接为主服务器的账户 。 没有这个权限,从服务器不能发出对主服务器上的数据库所发出的更新请求。

拥有SHOW DATABASES 权限 便允许账户使用SHOW DATABASE 语句来查看数据库名。没有该权限的账户只能看到他们具有部分权限的数据库, 如果数据库用--skip-show-database 选 项启动,则根本不能使用这些语句。请注意全局权限指数据库的权限。

总的说来,只授予权限给需要他们的那些用户是好主意,但是你应该在授予FILE 和管理权限时试验特定的警告:

  • FILE 权限可以被滥用于将服务器主机上MySQL 能读取的任何文件读入到数据库表中。包 括任何人可读的文件和服务器数据目录中的文件。可以使用SELECT 访问数据库表,然后将其内容传输到客户端上。
  • GRANT 权限允许用户将他们的权限给其他用户。有不同的权限并有GRANT 权限的2 个 用户可以合并权限。
  • ALTER 权限可以用于通过重新命名表来推翻权限系统。
  • SHUTDOWN 权限通过终止服务器可以被滥用完全拒绝为其他用户服务。
  • PROCESS 权限能被用来察看当前执行的查询的明文文本,包括设定或改变密码的查询。
  • SUPER 权限能用来终止其它用户或更改服务器的操作方式。
  • 授给mysql 数据库本身的权限能用来改变密码和其他访问权限信息。密码被加密存储,所以恶意的用户不能简单 地读取他们以知道明文密码。然而,具有userPassword 列写访问权限的用户可以更改账户 的密码,并可以用该账户连接MySQL 服务器。

有一些事情你不能用MySQL 权限系统做到:

  • 你不能明显地指定某个给定的用户应该被拒绝访问。即,你不能明显地匹配用户然后拒绝连接。
  • 你不能指定用户有权创建立或删除数据库中的表,但不能创建或删除数据库本身。

你可能感兴趣的:(数据库,mysql,服务器,File,table,存储)