首页 > 代码库 > MYSQL用户权限管理

MYSQL用户权限管理

mysql用户和权限管理

作为一名mysql数据库管理员,有责任维护数据库系统上的数据的的完整性和安全性,使得只有被正确授权的用户才可以访问。这将涉及到数据库的外部安全性和内部安全星=性。

所谓外部安全性:就是决定用户是否可以登入到mysql数据库系统上,这样可以有效的避免来自外部网络对服务器连接的攻击。

内部安全性:即是防止服务器上已存在的用户对mysql服务器上面的数据进行攻击,因此,一个用户的权限如果设置不好的话,可能导致数据库上面的数据被删除、修改等等。

 

 

mysql的授权表

mysql客户能否访问mysql数据库是由mysql的授权表来决定的,这些授权表是在刚刚安装mysql时,进行mysql初始化(mysql_install_db脚本)生成的。这些授权表公有6个,分别是:

user:该表存放了可以访问mysql服务器的用户名和密码,该表中启用的权限为全局权限,且适用于所有库。

db:该表存放的是所有的数据库,该表启用的权限只对该数据库有效。因此,这个表设置的是数据库级别的权限。

host:该表已被废弃

tables_priv:用于指定表级别权限

columns_priv:用于指定烈级别权限

procs_priv:用于指定存储过程和存储函数的相关权限

proxies_priv:用于指定代理用户的相关权限

 

mysql的权限管理

出于对数据的安全性保护,因此,授予正确的权限给用户史非常重要的,下面这张表记录的就是mysql的所有权限。包括库级别、表级别、索引级别、字段级别、存储函数和存储过程级别、视图级别、文件访问级别以及全局权限等等众多权限。每一个级别及其相关的权限都在下表显示。

context:表示这些权限可以用在哪些环境或级别下。

http://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/privileges-provided.html#priv_create_temporay_tables(使用这个网址可以查询到如下表结构)

 

Privilege

Column

Context

CREATE

Create_priv

databases, tables, or indexes

DROP

Drop_priv

databases, tables, or views

GRANT OPTION

Grant_priv

databases, tables, or stored routines

LOCK TABLES

Lock_tables_priv

databases

REFERENCES

References_priv

databases or tables

EVENT

Event_priv

databases

ALTER

Alter_priv

tables

DELETE

Delete_priv

tables

INDEX

Index_priv

tables

INSERT

Insert_priv

tables or columns

SELECT

Select_priv

tables or columns

UPDATE

Update_priv

tables or columns

CREATE TEMPORARY TABLES

Create_tmp_table_priv

tables

TRIGGER

Trigger_priv

tables

CREATE VIEW

Create_view_priv

views

SHOW VIEW

Show_view_priv

views

ALTER ROUTINE

Alter_routine_priv

stored routines

CREATE ROUTINE

Create_routine_priv

stored routines

EXECUTE

Execute_priv

stored routines

FILE

File_priv

file access on server host

CREATE TABLESPACE

Create_tablespace_priv

server administration

CREATE USER

Create_user_priv

server administration

PROCESS

Process_priv

server administration

PROXY

See proxies_priv table

server administration

RELOAD

Reload_priv

server administration

REPLICATION CLIENT

Repl_client_priv

server administration

REPLICATION SLAVE

Repl_slave_priv

server administration

SHOW DATABASES

Show_db_priv

server administration

SHUTDOWN

Shutdown_priv

server administration

SUPER

Super_priv

server administration

ALL [PRIVILEGES]

server administration

USAGE

server administration

 

 

 

创建用户、为用户授权和取消授权

1、创建用户

CREATE USER username@’host’ [IDENTIFIED BY ‘password’]

其中username必须在16个字符以内才行

host:可以表示的方法有这些:

HOSTNAME:例如www.baidu.com

IP:例如192.168.1.1

NETWORK:例如172.16.0.0/255.255.0.0

通配符表示法:

%:表示所有的主机

%.xsl.com:表示这个域内的所有主机

 

在连接mysql服务器时,mysql服务器为了验证远程主机的合法性,一般会进行正解和反解主机名,使用--skip-name-resolv选项可以忽略名称解析过程,这可以在某一程度上缓解mysql服务器的连接和加速mysql的性能及节约时间。

 

 

2、为用户授权

授权命令使用GRANT

GRANT的语法格式为:

 

 

GRANT

    priv_type [(column_list)]   [, priv_type [(column_list)]] ...

    ON [object_type] priv_level

    TO user_specification [, user_specification] ...

    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]

[WITH with_option ...]

 

其中priv_type:表示权限类型,就是上表最左边的字段,那里有所有的权限类型

column_list:是可选字段,表示对指定的字段授权。可以指定多个

objiect_type:表示对象类型,主要有有三个:

TABLE(表)、FUNCTION(存储函数)、PROCEDURE(存储过程)

 

priv_level:表示设置在哪个级别下的权限

                     *     :表示用来设定任何库级别下的权限

                    | *.*   :如果使用这中方式,必须要指定对象类型字段。用来说明是设定库的表、库的存储函数还是库的存储过程等相关权限

                    | db_name.*:如果使用这中方式,必须要指定对象类型字段。用来说明是设定库的表、库的存储函数还是库的存储过程等相关权限

                    | db_name.tbl_name:表示设定某个库下的某个表的权限

                    | tbl_name:表示设定在某个表的权限

                    | db_name.routine_name:表示设定某个库的某个存储程序的相关权限

user_specification username@’hostname’ [IDENTIFIED BY [PASSWORD] ‘password‘],为某个用户授权

 

ssl_option:这些是使用ssl来建立mysql会话时使用的选项

    SSL

  | X509

  | CIPHER ‘cipher‘

  | ISSUER ‘issuer‘

  | SUBJECT ‘subject‘

 

with_option:

    GRANT OPTION :可以为某个用户授权

  | MAX_QUERIES_PER_HOUR count :每小时的最大查询请求数

  | MAX_UPDATES_PER_HOUR count:每小时的最大更新请求数

  | MAX_CONNECTIONS_PER_HOUR count:每小时的最大连接数

  | MAX_USER_CONNECTIONS count:每个主机的用户最多可以连接几次

 

查看用户授权信息

SHOW GRANTS  FOR ‘username‘@‘host‘

授权完毕后,执行flush privilege命令让系统重读授权表

 

重读授权表

Flush  privileges

在帮用户授权完毕后,执行该命令,可以让内存重读授权表。当mysql服务启动后,系统会加载授权表到内存中去,因此,一旦授权表更改,必须让内存重读授权表。

 

3、取消用户授权revoke

REVOKE命令可以用来取消用户相关权限的,其语法和命令和GRANT命令大概一致

REVOKE

priv_type [(column_list)]   [, priv_type [(column_list)]] ...

    ON  [object_type] priv_level

    FROM  user [,user] …

本文出自 “linux学习之路” 博客,请务必保留此出处http://xslwahaha.blog.51cto.com/4738972/1579889

MYSQL用户权限管理