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 '12345';
或者
     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 '12345';


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》请求核实阶段

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

posted @ 2019-09-07 18:31  ZeroMZ  阅读(281)  评论(0编辑  收藏  举报