设为首页 加入收藏

TOP

MySQL优化之――权限管理(一)
2015-07-24 11:53:49 来源: 作者: 【 】 浏览:8
Tags:MySQL 优化 权限 管理

在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有:

1、user表

2、db表

3、host表

4、table_priv表

5、columns_priv表

6、proc_priv表

MySQL存取控制包含2个阶段:

阶段1:服务器检查你是否允许连接。 阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库中一个表精选(select)行或从数据库抛弃一个表,服务器确定你对表有 select权限或对数据库有 drop权限。

服务器在存取控制的两个阶段使用在mysql的数据库中的user、db和host表,在这些授权表中字段如下:

表名称 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
? Reload_priv ? ?
? Shutdown_priv ? ?
? Process_priv ? ?
? File_priv ? ?

对存取控制的第二阶段(请求证实),如果请求涉及表,服务器可以另外参考tables_priv和columns_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 ?

每个授权表包含范围字段和权限字段。

user表主要分为:用户列、权限列、安全列、资源控制列

host表主要分为:用户列、权限列

这里美中不足的是mysql.user 没有一个列是保存用户创建时间的

有时候排查用户问题的时候,比如某个客户在某个时间说连接不上数据库,我们在user表里只能查到是否存在那个用户

但是不知道这个用户的创建时间,也就是说客户说的那个时间究竟用户是否已经创建我们是不知道的


帐户管理

MYSQL提供许多语句用来管理用户帐号,这些语句可以用来包括登录和退出MYSQL服务器、创建用户、删除用户、密码管理、权限管理

MYSQL数据库的安全性,需要通过帐户管理来保证

登录和退出MYSQL

mysql命令的常用参数

-h:主机名或ip,默认是localhost,最好指定-h参数

-u:用户名

-p:密码,注意:该参数后面的字符串和-p不能有空格

-P:端口号,默认为3306

数据库名:可以在命令最后指定数据库名

-e:执行SQL语句,如果指定该参数,将在登录后执行-e后面的命令或sql语句并退出

\

?

命令执行完之后返回book表的结构,查询返回之后会自动退出MYSQL


用户

?

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
    [, user [IDENTIFIED BY [PASSWORD] 'password']] 

?

新建普通用户

?

CREATE USER 'jeffrey'@'localhost' identified BY 'mypass';

?

用户名部分为“jeffrey”,主机名默认为“%”(即对所有主机开放权限)

如果指定用户登录不需要密码,则可以省略identified BY部分

对于使用插件认证连接的用户,服务器调用指定名称的插件,客户端需要提供验证方法所需要的凭据。

如果创建用户时或者连接服务器时,服务器找不到对应的插件,将返回一个错误

identified with语法

?

CREATE user 'jeffrey'@'localhost' identified with my_auth_plugin;

?

identified with只能在MYSQL5.5.7及以上版本使用。

identified with和identified by是互斥的,所以对一个帐户来说只能使用一个验证方法。

CREATE USER语句的操作会被记录到服务器日志文件或者操作历史文件中

例如 ~/.mysql_history。这意味着对这些文件有读取权限的人,都可以读取到新添加用户的明文密码

\

一个办法就是新建用户的时候使用password关键字

?

CREATE user 'tom'@'localhost' identified BY password'*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
SELECT password('mypass');
SELECT * FROM `mysql`.`user` WHERE `User` ='tom';

?

先查出你的密码的哈希值,然后在新建用户的时候输入哈希值

那么在日志里面就只能看到哈希值

\

\

?


使用GRANT语句创建新用户

GRANT USER语句可以用来创建帐户,通过该语句可以在user表中添加一条新记录

比起CREATE USER语句创建的新用户,还需要使用GRANT语句赋予用户权限

使用GRANT语句创建新用户时必须有GRANT权限。

语法

?

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
    ON [object_type] {tbl_name | * | *.* | db_name.*}
    TO user [IDENTIFIED BY [PASSWORD] 'password']
        [, user [IDENTIFIED BY [PASSWORD] 'password']] ...
    [REQUIRE
        NONE |
        [{SSL| X509}]
        [CIPHER 'cipher' [AND]]
        [ISSUER 'issuer' [AND]]
        [SUBJECT 'subject']]
    [WITH with_option [with_option] ...]

?

使用GRANT语句创建一个新用户testUser,密码为testpwd,并授予用户对所有数据表的SELECT和UPDATE权限

?

GRANT SELECT ,UPDATE ON *.* TO 'testUser'@'localhost
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Mysql中创建序列的方法 下一篇mysql技术内幕之InnoDBInsert(插..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)