发新话题
打印

MYSQL授权表的结构以及服务器与客户端交互操作时如何使用其内容

MYSQL授权表的结构以及服务器与客户端交互操作时如何使用其内容

服务器在存取控制的两个阶段使用mysql数据库中的userdbhost表,这些授权表中的列如下:

表名

user

db

host

列范围

Host

Host

Host

 

User

Db

Db

 

Password

User

 

权限列

Select_priv

Select_priv

Select_priv

 

Insert_priv

Insert_priv

Insert_priv

 

Update_priv

Update_priv

Update_priv

 

Delete_priv

Delete_priv

Delete_priv

 

Index_priv

Index_priv

Index_priv

 

Alter_priv

Alter_priv

Alter_priv

 

Create_priv

Create_priv

Create_priv

 

Drop_priv

Drop_priv

Drop_priv

 

Grant_priv

Grant_priv

Grant_priv

 

Create_view_priv

Create_view_priv

Create_view_priv

 

Show_view_priv

Show_view_priv

Show_view_priv

 

Create_routine_priv

Create_routine_priv

 

 

Alter_routine_priv

Alter_routine_priv

 

 

References_priv

References_priv

References_priv

 

Reload_priv

 

 

 

Shutdown_priv

 

 

 

Process_priv

 

 

 

File_priv

 

 

 

Show_db_priv

 

 

 

Super_priv

 

 

 

Create_tmp_table_priv

Create_tmp_table_priv

Create_tmp_table_priv

 

Lock_tables_priv

Lock_tables_priv

Lock_tables_priv

 

Execute_priv

 

 

 

Repl_slave_priv

 

 

 

Repl_client_priv

 

 

安全列

ssl_type

 

 

 

ssl_cipher

 

 

 

x509_issuer

 

 

 

x509_subject

 

 

资源控制列

max_questions

 

 

 

max_updates

 

 

 

max_connections

 

 

 

max_user_connections

 

 

对存取控制的第二阶段(请求证实),服务器执行请求验证以确保每个客户端有充分的权限满足各需求。除了userdbhost授权表,如果请求涉及表,服务器可以另外参考tables_privcolumns_priv表。tables_privcolumns_priv表可以对表和列提供更精确的权限控制。这些表的列如下:

表名

tables_priv

columns_priv

范围列

Host

Host

 

Db

Db

 

User

User

 

Table_name

Table_name

 

 

Column_name

权限列

Table_priv

Column_priv

 

Column_priv

 

其它列

Timestamp

Timestamp

 

Grantor

 

TimestampGrantor列当前还未使用,这儿不再进一步讨论。

为了对涉及保存程序的请求进行验证,服务器将查阅procs_priv表。该表具有以下列:

表名

procs_priv

范围列

Host

 

Db

 

User

 

Routine_name

 

Routine_type

权限列

Proc_priv

其它列

Timestamp

 

Grantor

Routine_type列为ENUM列,值为'FUNCTION''PROCEDURE',表示行所指的程序类型。该列允许为同名函数和程序单独授权。

TOP

简单地说,服务器使用这样的授权表:
?         user表范围列决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限。这些权限适用于服务器上的all数据库。
?         db表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。
?         当你想要一个给定的db表行应用于若干主机时,db和host表一起使用。例如,如果你想要一个用户能在你的网络从若干主机使用一个数据库,在用户的db表行的Host值设为空值,然后将那些主机的每一个移入host表。
注释:host表不受GRANT和REVOKE语句的影响。大多数MySQL安装根本不需要使用该表。
?         tables_priv和columns_priv表类似于db表,但是更精致:它们在表和列级应用而非在数据库级。授予表级别的权限适用于表和所有它的列。授予列级别的权限只适用于专用列。
?         procs_priv表适用于保存的程序。授予程序级别的权限只适用于单个程序。
管理权限(例如RELOAD或SHUTDOWN等等)仅在user表中被指定。这是因为管理性操作是服务器本身的操作并且不是特定数据库,因此没有理由在其他授权表中列出这样的权限。事实上,只需要查询user表来决定你是否执行一个管理操作。
FILE权限也仅在user表中指定。它不是管理性权限,但你在服务器主机上读或写文件的能力与你正在存取的数据库无关。
当mysqld服务器启动时,将授权表的内容读入到内存中。你可以通过FLUSH PRIVILEGES语句或执行mysqladmin flush-privileges或mysqladmin reload命令让它重新读取表。对授权表的更改生效在5.7.7节,“权限更改何时生效”描述。
当你修改授权表的内容时,确保你按你想要的方式更改权限设置是一个好主意。要检查给定账户的权限,使用SHOW GRANTS语句。例如,要检查Host和User值分别为pc84.example.com和bob的账户所授予的权限,应通过语句:

mysql> SHOW GRANTS FOR 'bob'@'pc84.example.com';
一个有用的诊断工具是mysqlaccess脚本,由Carlier Yves 提供给MySQL分发。使用--help选项调用mysqlaccess查明它怎样工作。注意:mysqlaccess仅用user、db和host表检查存取。它不检查tables_priv、columns_priv或procs_priv表中指定的表、列和程序级权限。
对于诊断权限相关的问题的其它帮助。对于安全问题常规建议。

TOP

发新话题