1、权限表

存储用户权限信息表主要有:user、db、host、tables_priv、columns_priv、procs_priv。

1》user表:

记录允许连接到服务器的账号信息,里面的权限是全局级别的。user表有42个字段,这些字段可以分为4类,分别是用户列、权限列、安全列、资源控制列。

2》db和host表

3》tables_priv和columns_priv表

4》procs_priv表

2、账户管理

1》登录和登出MySQL

mysql [-h localhost] -uroot -p12345 -P端口号,默认3306 -e命令或SQL语句

 2》新建普通用户

1>create user或grant语句:

//create user ...
create user user_specification[,user_specification] ... user_specification:
user@host
[
identified by [password] 'password'
|identified with auth_plugin [as 'auth_string']
] user:表示创建的用户名称
host:表示允许登录的用户主机名
identified by:表示用来设置用户的密码。与identitied with互斥。
[password]:表示使用hash值设置密码
'password':表示登录时使用的普通明文密码
identified with:为用户指定一个身份验证插件。与identified by互斥。
auth_plugin:插件的名称
auth_string:该参数传值给身份验证插件,由该插件解析该参数的意义
举例:create user 'lfy'@'localhost'  identified by '';
或者
     create user 'lfy'@'localhost';
//grant语句不仅可以创建用户,还可以在创建用户的同时授权
grant privileges on db.table
to user@host [identified by 'password'] [,user [identified by 'password']]
[with grant option]; privileges:表示赋予用户的权限类型
db.table:表示用户的权限所作用的数据库中的表
identified by:设置的密码
[with grant option]:表示对新建立的用户赋予grant权限,即该用户可以对其他用户赋予权限。
grant select,update on *.*
to 'lfy'@'localhost' identified by ''; user、host字段区分大小写。查询的时候需要指定正确的值。

2>直接操作MySQL授权表:

insert into MySQL.user(user,host,password,[privilegelist]) values(...)

3》删除普通用户,2种方式。

1>drop user语句

drop user user1 [,user2];

2>delete删除用户

delete from MySQL.user where host='hostname' and user='username';

4》root用户修改自己的密码

1>mysqladmin命令

mysqladmin -u username -h localhost -p password 'newpwd';

2>修改MySQL.user表

update MySQL.user set password=password("rootpwd") where user="root" and host="localhost"; 

执行完上面的语句修改密码后,还需要执行:
mysql>FLUSH PRIVILEGES; //重新加载权限

3>使用set语句修改root用户的密码

//可以修改别的用户的密码,也可以修改自己的密码
mysql>set password=password("rootpwd"); mysql>FLUSH PRIVILEGES;

5》root用户修改普通用户的密码:set数据库的MySQL.user表,或者grant语句

1>使用set语句修改普通用户的密码

set password for 'user'@'host' = password('somepassword');

//普通用户更改自己的密码
set password=password('somepassword');

2>使用update语句修改普通用户的密码

update MySQL.user set password=password('pwd')
where user='username' and host='hostname'; PLUSH PRIVILEGES;

3>使用grant语句修改普通用户密码

grant urant on *.* to 'user'@'%' identified by 'somepassword';

//全局界别使用grant usage语句(*.*)指定某个账户的密码而不影响账户当前的权限。

使用grant ... identified by语句或者MySQLadmin password命令设置密码,它们俊辉加密密码。这种情况下,
不需要使用password()函数

6》普通用户修改密码

set password = password('pwd');

7》root用户密码丢失

1>使用--skip-grant-tables选项启动MySQL服务

使用使用--skip-grant-tables选项启动MySQL服务,MySQL数据库服务器将不加载权限判断,任何用户都能访问数据库。Windows操作系统中,可以使用MySQLLd或MySQLLd-nt来启动MySQL服务进程。

mysqld --skip-grant-tables
或者
mysqld-nt --skip-grant-tables

2>使用root用户登录,重新设置密码。

3、权限管理

1》MySQL的各种权限

2》授权

1>全局层级:全局权限适用于一个给定服务器中的所有数据库。这些权限存储在MySQL.user表中。grant all on *.*和revoke all on *.*只授予和撤销全局权限。

2>数据库层级

数据库权限适用于一个给定数据库中的所有目标。这些权限存储在MySQL.db和MySQL.host表中。grant all on db_name.和revoke all on db_name.*只授予和撤销数据库权限。

3>表层级

表权限适用于一个给定表中的所有列。

4>列层级

列权限适用于一个给定表中的单一列。

5>子程序层级

3》收回权限

revoke ...

4》查看权限

mysql> show grants for 'mysql'@'localhost';
+----------------------------------------------------------------------+
| Grants for mysql@localhost |
+----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------+
1 row in set (0.00 sec) mysql>

4、访问控制

1》连接核实阶段

通过Host、user、password几个字段核实用户的连接请求。不能通过,则拒绝访问数据库服务器。

2》请求核实阶段

对于通过连接的会话,对于此链接上的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它。

最新文章

  1. 暗黑战神客户端(IOS和Android)打包教程
  2. [转载]Windows 2012 R2安装SharePoint 2013 手动安装工具软件
  3. TortoiseSVN期望文件系统格式在“1”到“6”之间;发现格式“7”
  4. EF CRUD 操作
  5. jquery如何让滚动条默认在最底部
  6. C++基础回顾1(数据类型, 控制语句, 数组)
  7. FileUtils类应该有哪些内容
  8. 苦B的程序猿道路数据验证
  9. Nancy简单实战之NancyMusicStore(五):部署上线
  10. Android系统启动概要
  11. day052 django第三天 url和视图
  12. netty 基础
  13. grep基础用法
  14. Python web 框架之 Django 基础搭建服务
  15. javascript实例——文本特效篇(包含3个小例子)
  16. Mybatis联合查询记录,左连接参数操作
  17. 【算法】—— 1到n中减少了一个数,顺序被打乱,找出缺失的数
  18. Mysql 用户权限管理--从 xxx command denied to user xxx
  19. document.selection window.getSelection()
  20. 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)

热门文章

  1. redis开发使用规范
  2. tensorflow conv2d
  3. python+selenium封装UI自动化框架
  4. sqljob
  5. python3.5-tensorflow-keras 安装
  6. Codeforces 960D Full Binary Tree Queries ( 思维 && 模拟 )
  7. 为什么MongoDB适合大数据的存储?
  8. K8S简介
  9. jconsole性能监控
  10. [LeetCode]-algorithms-Add Two Numbers