MySQL Study之--MySQL用户及权限管理


    MySQLserver通过MySQL权限表来控制用户对数据库的訪问。MySQL权限表存放在mysql数据库里。由mysql_install_db脚本初始化。

这些MySQL权限表分别user,db,table_priv。columns_priv和host。以下分别介绍一下这些表的结构和内容:

user权限表:记录同意连接到server的用户帐号信息,里面的权限是全局级的。

db权限表:记录各个帐号在各个数据库上的操作权限。

table_priv权限表:记录数据表级的操作权限。

columns_priv权限表:记录数据列级的操作权限。

host权限表:配合db权限表对给定主机上数据库级操作权限作更仔细的控制。

这个权限表不受GRANT和REVOKE语句的影响。



案例分析:



一、创建用户并授权(root用户)

[root@mysrv ~]# mysql -u root -poracle



mysql> select version()\g

+-------------------------------------------+

| version()                                 |

+-------------------------------------------+

| 5.6.25-enterprise-commercial-advanced-log |

+-------------------------------------------+

1 row in set (0.00 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| prod               |

| test               |

+--------------------+

5 rows in set (0.01 sec)





1、建立tom用户并授权(特权管理用户)



mysql> grant all on prod.* to 'tom'@'%' identified by 'tom' with grant option;

Query OK, 0 rows affected (0.00 sec)



查看用户创建是否成功:

mysql> select user,host from user ;

+-------+-----------+
| user | host |
+-------+-----------+
| tom | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| scott | localhost |
| | mysrv |
| root | mysrv |
+-------+-----------+
8 rows in set (0.00 sec)

查看tom用户的授权:

mysql> show grants for tom;

+----------------------------------------------------------------------------------------------------+

| Grants for tom@%                                                                                   |

+----------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'tom'@'%' IDENTIFIED BY PASSWORD '*71FF744436C7EA1B954F6276121DB5D2BF68FC07' |

| GRANT ALL PRIVILEGES ON `prod`.* TO 'tom'@'%' WITH GRANT OPTION                                    |

+----------------------------------------------------------------------------------------------------+



GRANT 语法

GRANT privileges (columns)

    ON what

    TO user IDENTIFIED BY "password"

    WITH GRANT OPTION





权限列表:

ALTER: 改动表和索引。

CREATE: 创建数据库和表。

DELETE: 删除表中已有的记录。

DROP: 抛弃(删除)数据库和表。

INDEX: 创建或抛弃索引。

INSERT: 向表中插入新行。

REFERENCE: 未用。

SELECT: 检索表中的记录。

UPDATE: 改动现存表记录。

FILE: 读或写server上的文件。

PROCESS: 查看server中运行的线程信息或杀死线程。

RELOAD: 重载授权表或清空日志、主机缓存或表缓存。

SHUTDOWN: 关闭server。

ALL: 全部权限。ALL PRIVILEGES同义词。

USAGE: 特殊的 "无权限" 权限。

用 户账户包含 "username" 和 "host" 两部分,后者表示该用户被同意从何地接入。

tom@'%' 表示不论什么地址,默认能够省略。还能够是 "tom@192.168.1.%"、"tom@%.abc.com" 等。数据库格式为 db@table,能够是 "test.*" 或 "*.*",前者表示 test 数据库的全部表,后者表示全部数据库的全部表。 

子句 "WITH GRANT OPTION" 表示该用户能够为其它用户分配权限。 





2、我们用 root 再创建几个用户。然后由 test 数据库的管理员tom为他们分配权限。



mysql> create user 'tom1' identified by 'tom1' ,'tom2' identified by 'tom2';

Query OK, 0 rows affected (0.00 sec)



mysql> select user,host from user ;

+-------+-----------+
| user | host |
+-------+-----------+
| tom | % |
| tom1 | % |
| tom2 | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| scott | localhost |
| | mysrv |
| root | mysrv |
+-------+-----------+
10 rows in set (0.00 sec)

root用户退出,tom登陆,并授权用户訪问prod库



[root@mysrv ~]# mysql -u tom -ptom  
 

ERROR 1045 (28000): Access denied for user 'tom'@'localhost' (using password: YES)



tom用户竟不能登陆!

!!



再对tom用户授权:

mysql> grant all on prod.* to 'tom'@'localhost' identified by 'tom' with grant option;;

Query OK, 0 rows affected (0.00 sec)



mysql> show grants for tom;

+----------------------------------------------------------------------------------------------------+

| Grants for tom@%                                                                                   |

+----------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'tom'@'%' IDENTIFIED BY PASSWORD '*71FF744436C7EA1B954F6276121DB5D2BF68FC07' |

| GRANT ALL PRIVILEGES ON `prod`.* TO 'tom'@'%' WITH GRANT OPTION                                    |

+----------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)



mysql> use mysql;

Database changed

mysql> select user,host from user ;

+-------+-----------+
| user | host |
+-------+-----------+
| tom | % |
| tom1 | % |
| tom2 | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| scott | localhost |
| tom | localhost |
| | mysrv |
| root | mysrv |
+-------+-----------+
11 rows in set (0.00 sec)

tom登陆:

[root@mysrv ~]# mysql -u tom -ptom prod



mysql> select database();


+------------+

| database() |

+------------+

| prod       |

+------------+

1 row in set (0.01 sec)



mysql> select current_user();

+----------------+

| current_user() |

+----------------+

| tom@localhost  |

+----------------+

1 row in set (0.00 sec)



创建表:



mysql> show tables;

+----------------+

| Tables_in_prod |

+----------------+

| t1             |

+----------------+

1 row in set (0.00 sec)



mysql> create table t2 as select * from t1;

Query OK, 3 rows affected (0.15 sec)

Records: 3  Duplicates: 0  Warnings: 0



查看表信息:



mysql> desc t2;


+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  |     | NULL    |       |

| name  | varchar(10) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.01 sec)



mysql> show create table t2;


+-------+---------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                              |

+-------+---------------------------------------------------------------------------------------------------------------------------+

| t2    | CREATE TABLE `t2` (

  `id` int(11) DEFAULT NULL,

  `name` varchar(10) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+---------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.01 sec)



mysql> show create table t2\G;

*************************** 1. row ***************************

       Table: t2

Create Table: CREATE TABLE `t2` (

  `id` int(11) DEFAULT NULL,

  `name` varchar(10) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1

1 row in set (0.00 sec)



mysql> select * from t2;

+------+-------+

| id   | name  |

+------+-------+

|   10 | tom   |

|   20 | jerry |

|   30 | rose  |

+------+-------+

3 rows in set (0.00 sec)



3、tom用户为tom1,tom2授权

mysql> grant select on prod.* to tom1;

Query OK, 0 rows affected (0.00 sec)



mysql> grant select on prod.* to tom2;

Query OK, 0 rows affected (0.02 sec)



mysql> grant insert,update on prod.* to tom2;

Query OK, 0 rows affected (0.00 sec)



tom2登陆(从远程登陆):



C:\Users\Administrator>mysql -h 192.168.8.240 -utom2 -ptom2



mysql> select database();

+------------+

| database() |

+------------+

| NULL       |

+------------+

1 row in set (0.00 sec)



mysql> use prod;

Database changed

mysql> select database();

+------------+

| database() |

+------------+

| prod       |

+------------+

1 row in set (0.00 sec)



mysql> select current_user();

+----------------+

| current_user() |

+----------------+

| tom2@%         |

+----------------+

1 row in set (0.00 sec)



mysql> show grants for tom2;

+------------------------------------------------------------------+

| Grants for tom2@%                                                |

+------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'tom2'@'%' IDENTIFIED BY PASSWORD <secret> |

| GRANT SELECT, INSERT, UPDATE ON `prod`.* TO 'tom2'@'%'           |

+------------------------------------------------------------------+

2 rows in set (0.00 sec)



mysql> show tables;

+----------------+

| Tables_in_prod |

+----------------+

| t1             |

| t2             |

+----------------+

2 rows in set (0.00 sec)



mysql> select * from t1;

+------+-------+

| id   | name  |

+------+-------+

|   10 | tom   |

|   20 | jerry |

|   30 | rose  |

+------+-------+

3 rows in set (0.00 sec)



mysql> select * from t2;

+------+-------+

| id   | name  |

+------+-------+

|   10 | tom   |

|   20 | jerry |

|   30 | rose  |

+------+-------+

3 rows in set (0.00 sec)



mysql> insert into t1 values (40,'john');

Query OK, 1 row affected (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.09 sec)



mysql> select * from t1;

+------+-------+

| id   | name  |

+------+-------+

|   10 | tom   |

|   20 | jerry |

|   30 | rose  |

|   40 | john  |

+------+-------+

4 rows in set (0.00 sec)



mysql> update t1 set name='ellen' where id=40;

Query OK, 1 row affected (0.01 sec)

Rows matched: 1  Changed: 1  Warnings: 0



mysql> select * from t1;

+------+-------+

| id   | name  |

+------+-------+

|   10 | tom   |

|   20 | jerry |

|   30 | rose  |

|   40 | ellen |

+------+-------+

4 rows in set (0.00 sec)



mysql> delete from t1;

ERROR 1142 (42000): DELETE command denied to user 'tom2'@'192.168.8.254' for tab

le 't1'

mysql> commit;

Query OK, 0 rows affected (0.05 sec)



mysql> select * from t1;

+------+-------+

| id   | name  |

+------+-------+

|   10 | tom   |

|   20 | jerry |

|   30 | rose  |

|   40 | ellen |

+------+-------+

4 rows in set (0.00 sec)





4、回收tom2的update权限:

mysql> revoke update on prod.* from tom2;

Query OK, 0 rows affected (0.00 sec)



tom2再又一次登陆:

C:\Users\Administrator>mysql -h 192.168.8.240 -utom2 -ptom2



mysql> use prod;

Database changed

mysql> update t1 set name='lily' where id=10;

ERROR 1142 (42000): UPDATE command denied to user 'tom2'@'192.168.8.254' for tab

le 't1'

---update失败!

二、改动用户口令:



1、root用户改动普通用户口令

mysql> set password for tom1=password('oracle');

Query OK, 0 rows affected (0.01 sec)



mysql> flush privileges;


Query OK, 0 rows affected (0.00 sec)



tom1又一次登陆:

C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -ptom1

Warning: Using a password on the command line interface can be insecure.

ERROR 1045 (28000): Access denied for user 'tom1'@'192.168.8.254' (using passwor

d: YES)

---旧口令登陆失败!



C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -poracle

mysql>



2、普通用户改动自己password:

C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -poracle

mysql> set password=password('tom1');

Query OK, 0 rows affected (0.00 sec)



又一次登陆:

C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -ptom1


mysql>

---新password登陆成功 !


三、删除用户:


1、回收用户全部权限

mysql> revoke all on prod.* from tom2;

Query OK, 0 rows affected (0.01 sec)



2、删除用户

mysql> drop user tom2;

Query OK, 0 rows affected (0.00 sec)



mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)



mysql> select user,host from user;

+-------+-----------+
| user | host |
+-------+-----------+
| jerry | % |
| rose | % |
| tom | % |
| tom1 | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| jerry | localhost |
| root | localhost |
| rose | localhost |
| scott | localhost |
| tom | localhost |
| | mysrv |
| root | mysrv |
+-------+-----------+
14 rows in set (0.00 sec)

------- 摘要 -------------------------------------- 



创建用户:

GRANT insert, update ON testdb.* TO user1@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

CREATE USER user2 IDENTIFIED BY 'password';

分配权限:

GRANT select ON testdb.* TO user2;

查看权限:

SHOW GRANTS FOR user1;

改动password:

SET PASSWORD FOR user1 = PASSWORD('newpwd');

SET PASSWORD = PASSWORD('newpwd');

移除权限:

REVOKE all ON *.* FROM user1; 

删除用户:

DROP USER user1;

数据库列表:

SHOW DATABASES;

数据表列表:

SHOW TABLES;

当前数据库:

SELECT DATABASE();

当前用户:

SELECT USER();

数据表结构:

DESCRIBE table1;

刷新权限:

FLUSH PRIVILEGES;



grant和revoke能够在几个层次上控制訪问权限

1,整个server,使用 grant ALL  和revoke  ALL

2,整个数据库。使用on  database.*

3。特点表,使用on  database.table

4,特定的列

5,特定的存储过程

 

user表中host列的值的意义

%              匹配全部主机

localhost    localhost不会被解析成IP地址,直接通过UNIXsocket连接

127.0.0.1      会通过TCP/IP协议连接,而且仅仅能在本机訪问;

::1                 ::1就是兼容支持ipv6的。表示同ipv4的127.0.0.1

 

grant 普通数据用户,查询、插入、更新、删除 数据库中全部表数据的权利。

grant select on testdb.* to common_user@’%’

grant insert on testdb.* to common_user@’%’

grant update on testdb.* to common_user@’%’

grant delete on testdb.* to common_user@’%’

或者,用一条 MySQL 命令来替代:

grant select, insert, update, delete on testdb.* to common_user@’%’

grant 数据库开发者,创建表、索引、视图、存储过程、函数。。。

等权限。

grant 创建、改动、删除 MySQL 数据表结构权限。

grant create on testdb.* to developer@’192.168.0.%’;

grant alter on testdb.* to developer@’192.168.0.%’;

grant drop on testdb.* to developer@’192.168.0.%’;

grant 操作 MySQL 外键权限。

grant references on testdb.* to developer@’192.168.0.%’;

grant 操作 MySQL 暂时表权限。



grant create temporary tables on testdb.* to developer@’192.168.0.%’;

grant 操作 MySQL 索引权限。

grant index on testdb.* to developer@’192.168.0.%’;

grant 操作 MySQL 视图、查看视图源码 权限。

grant create view on testdb.* to developer@’192.168.0.%’;

grant show view on testdb.* to developer@’192.168.0.%’;

grant 操作 MySQL 存储过程、函数 权限。



grant create routine on testdb.* to developer@’192.168.0.%’; -- now, can show procedure status

grant alter routine on testdb.* to developer@’192.168.0.%’; -- now, you can drop a procedure

grant execute on testdb.* to developer@’192.168.0.%’;

grant 普通 DBA 管理某个 MySQL 数据库的权限。

grant all privileges on testdb to dba@’localhost’

当中,keyword “privileges” 能够省略。

grant 高级 DBA 管理 MySQL 中全部数据库的权限。

grant all on *.* to dba@’localhost’


MySQL grant 权限,分别能够作用在多个层次上。

1. grant 作用在整个 MySQL server上:

grant select on *.* to dba@localhost; -- dba 能够查询 MySQL 中全部数据库中的表。

grant all on *.* to dba@localhost; -- dba 能够管理 MySQL 中的全部数据库

2. grant 作用在单个数据库上:

grant select on testdb.* to dba@localhost; -- dba 能够查询 testdb 中的表。

3. grant 作用在单个数据表上:

grant select, insert, update, delete on testdb.orders to dba@localhost;

4. grant 作用在表中的列上:

grant select(id, se, rank) on testdb.apache_log to dba@localhost;

5. grant 作用在存储过程、函数上:

grant execute on procedure testdb.pr_add to ’dba’@’localhost’

grant execute on function testdb.fn_add to ’dba’@’localhost’



注意:改动完权限以后 一定要刷新服务。或者重新启动服务。刷新服务用:FLUSH PRIVILEGES。






MySQL Study之--MySQL用户及权限管理的更多相关文章

  1. MySQL/MariaDB数据库的用户和权限管理

    MySQL/MariaDB数据库的用户和权限管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.元数据数据库(mysql) 系统授权表(均在mysql数据库中): db hos ...

  2. mysql 用户及权限管理 小结

    MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命 ...

  3. MySQL用户与权限管理

    执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...

  4. mysql用户和权限管理

    用户和权限管理 Information about account privileges is stored in the user, db, host, tables_priv, columns_p ...

  5. Mysql 用户,权限管理的几点理解。

    前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql. 公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂..简单是因为网上关于m ...

  6. Mysql 用户和权限管理

    用户和权限管理: 语法 grant 权限 on 数据库.数据表 to '用户' @ '主机名'; 例:给 xiaogang 分配所有的权限 grant all on *.* to 'xiaogang' ...

  7. MySQL数据库用户和权限管理

    一.视图 视图:VIEW,虚表,保存有实表的查询结果,在视图插入的内容都会存入表中.创建方法: CREATE VIEW view_name [(column_list)] AS select_st ...

  8. MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置

    文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...

  9. MySQL基础篇(07):用户和权限管理,日志体系简介

    本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL用户 1.基础描述 在数据库的使用过程中,用户作为访问数据库的鉴权因素,起到非常重要的作用,安装MySQL时会自动生成一个roo ...

随机推荐

  1. PyTorch的十七个损失函数

    本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击: tensor-yu/PyTorch_Tutorial​github.com 版权声明:本文为博主原创文章,转载请附上 ...

  2. 测试linux服务器带宽

    测试准备 1. 计划考量参数 TCP上传数据带宽 TCP下载数据带宽 UDP上传带宽 UDP下载带宽 多并发支持 稳定性 Tcp通讯网络延迟(小包:32.中包1k.大包1M) UDP通讯网络延迟(小包 ...

  3. ps----像素与分辨率

    1.为了用于印刷,所以调整文档尺寸也很重要. 2.像素的多少决定了文件的大小,像素越多图像越清晰越逼真. 3.文档的尺寸改变需要结合分辨率. 4.像素固定的情况下修改分辨率高度宽度也会变化. 5.画面 ...

  4. mysql多字段组合删除重复行

    DELETEFROM boll_paramWHERE id in ( SELECT a.id FROM ( SELECT id FROM boll_param WHERE (symbol, time_ ...

  5. 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务

    Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback:如果发生的异常是checked异常,默认情况下数据库操作还是会 ...

  6. 【笔记】ubuntu如何切换到root用户&&linux如何关闭各种保护

    默认安装完成之后并不知道root用户的密码,那么如何应用root权限呢? (1)sudo 命令   这样输入当前管理员用户密码就可以得到超级用户的权限.但默认的情况下5分钟root权限就失效了. () ...

  7. 【HIHOCODER 1320】压缩字符串(区间DP)

    描述 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示.例如AAAAAAAAAABABABCCD可以用10(A)2( ...

  8. Java学习之并发多线程理解

    1.线程简介: 世间万物会同时完成很多工作,如人体同时进行呼吸.血液循环.思考问题等活动,用户既可以使用计算机听歌也可以使用它打印文件,而这些活动完全可以同时进行,这种思想在Java中称为并发,而将并 ...

  9. BeautifulSoup4系列一

    前言 以博客园为例,爬取我的博客上首页的发布时间.标题.摘要,本篇先小试牛刀,先了解下它的强大之处,后面讲beautifulsoup4的详细功能. 一.安装 1.打开cmd用pip在线安装beauti ...

  10. 【SPOJ694&705】Distinct Substrings(后缀数组)

    题意:求一个字符串的不相同的子串个数 n<=1000 思路:这是一道论文题 ..]of longint; n,i,m,ans,v,cas:longint; ch:ansistring; proc ...