MySQL-快速入门(11)用户管理
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》请求核实阶段
对于通过连接的会话,对于此链接上的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它。
最新文章
- 暗黑战神客户端(IOS和Android)打包教程
- [转载]Windows 2012 R2安装SharePoint 2013 手动安装工具软件
- TortoiseSVN期望文件系统格式在“1”到“6”之间;发现格式“7”
- EF CRUD 操作
- jquery如何让滚动条默认在最底部
- C++基础回顾1(数据类型, 控制语句, 数组)
- FileUtils类应该有哪些内容
- 苦B的程序猿道路数据验证
- Nancy简单实战之NancyMusicStore(五):部署上线
- Android系统启动概要
- day052 django第三天 url和视图
- netty 基础
- grep基础用法
- Python web 框架之 Django 基础搭建服务
- javascript实例——文本特效篇(包含3个小例子)
- Mybatis联合查询记录,左连接参数操作
- 【算法】—— 1到n中减少了一个数,顺序被打乱,找出缺失的数
- Mysql 用户权限管理--从 xxx command denied to user xxx
- document.selection window.getSelection()
- 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)