MySQL提供的权限

2013-05-07_144646

这是MySQL 5实力养成暨评量里的6-20.‘请参阅附图作答

以下哪些权限不应授权给非管理者权限的使用者,这些权限可让有权限的使用者可以看到目前正在执行的程序,或者可以修改伺服器的设定,或者可以将资料库的内容汇出到档案,开放这些权限,有可能造成资料库资料被窃取会窜改的危险?’

答案:(A)PROCESS(B)SUPER(C)FILE

[adsense][/adsense]

在手册MySQL 5.7 Reference Manual :: 6 Security :: 6.2 The MySQL Access Privilege System :: 6.2.1 Privileges Provided by MySQL

或是简体手册

MySQL 5.1参考手册 :: 5. 数据库管理::5.7. MySQL访问权限系统::5.7.3. MySQL提供的权限

转译繁体中文如下:

帐号权限讯息被储存在mysql资料库的user、db、host、tables_priv、columns_priv和procs_priv资料表中。在MySQL启动时并在5.7.7节,“权限更改何时生效”所说的情况时,伺服器将这些资料库资料表内容读入记忆体内。

GRANT和REVOKE语句所用的涉及权限的名称显示在下资料表,还有在授权资料表中每个权限的资料表列名称和每个权限有关的上下文。关于每个权限的含意相关的详细讯息参见MySQL GRANT及REVOKE语法

权限 上下文
CREATE Create_priv 资料库、资料表或索引
DROP Drop_priv 资料库或资料表
GRANT OPTION Grant_priv 资料库、资料表或保存的程式
REFERENCES References_priv 资料库或资料表
ALTER Alter_priv 资料表
DELETE Delete_priv 资料表
INDEX Index_priv 资料表
INSERT Insert_priv 资料表
SELECT Select_priv 资料表
UPDATE Update_priv 资料表
CREATE VIEW Create_view_priv 视图
SHOW VIEW Show_view_priv 视图
ALTER ROUTINE Alter_routine_priv 预储的程式
CREATE ROUTINE Create_routine_priv 预储的程式
EXECUTE Execute_priv 预储的程式
FILE File_priv 伺服器主机上的档案存取
CREATE TEMPORARY TABLES Create_tmp_table_priv 伺服器管理
LOCK TABLES Lock_tables_priv 伺服器管理
CREATE USER Create_user_priv 伺服器管理
PROCESS Process_priv 伺服器管理
RELOAD Reload_priv 伺服器管理
REPLICATION CLIENT Repl_client_priv 伺服器管理
REPLICATION SLAVE Repl_slave_priv 伺服器管理
SHOW DATABASES Show_db_priv 伺服器管理
SHUTDOWN Shutdown_priv 伺服器管理
SUPER Super_priv 伺服器管理

当从早期的没有CREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE和EXECUTE权限的版本的MySQL中升级时,要想使用这些权限,您必须使用MySQL分发提供的mysql_fix_privilege_tables指令升级 授权资料表。参见2.10.2节,“升级授权资料表”

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

通过CREATE和DROP权限,您可以建立新资料库和资料表,或删除(移掉)已有资料库和资料表。如果您将mysql资料库中的DROP权限授予某用户,用户可以删掉MySQL访问权限保存的资料库。

SELECT、INSERT、UPDATE和DELETE权限允许您在一个资料库现有的资料表上实施操作。

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 INFILE和SELECT … INTO OUTFILE语句读和写伺服器上的档案,任何被授予FILE权限的用户都能读或写MySQL伺服器能读或写的任何档案。(说明用户可以读任何资料库目录下的档案,因为伺服器可以存取这些档案)。 FILE权限允许用户在MySQL伺服器具有写权限的目录下建立新档案。不能覆盖已有档案。

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

权限 权限拥有者允许执行的命令
RELOAD flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload
SHUTDOWN shutdown
PROCESS processlist
SUPER kill

reload命令告诉伺服器将授权资料表重新读入记忆体内。flush-privileges是reload的同义词,refresh命令清空所有资料表并打开并关闭记录档案,其它flush-xxx命令执行类似refresh的功能,但是范围更有限,并且在某些情况下可能更好用。例如,如果您只是想清空记录档案,flush-logs比refresh是更好的选择。

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 STATUS和SHOW SLAVE STATUS。REPLICATION SLAVE权限应授予从伺服器所使用的将当前伺服器连接为主伺服器的帐号。没有这个权限,从伺服器不能发出对主伺服器上的资料库所发出的更新请求。

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

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

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

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

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