06、数据库权限管理


一 mysql库下的授权表

mysql数据库管理软件将权限信息都存放于mysql库下,该库下有一系列授权表,权限信息都存放于这一系列表中,其中几个尤为重要

mysql库下的授权表及其放行权限的范围

  • 1、mysql.user

    针对所有数据、所有库下所有表、以及表下的所有字段

    *.*->mysql.user
    grant all on *.* to 'egon'@'%' identified by '123';

  • 2、mysql.db

    只针对某一数据库下的所有表,以及表下的所有字段

    db.*->mysql.db
    grant all on db1.* to 'tom'@'%' identified by '123';
    撤销权限
    revoke select on db1.* to 'tom'@'%';

  • 3、mysql.tables_priv

    只针对某一张表、以及该表下的所有字段

    db1.bloh->mysql.tables_priv
    grant all on db1.blog to 'lili'@'%' identified by '123';

  • 4、mysql.columns_priv

    只针对某一个字段

    db1.blog->mysql.columns_priv,update权限依赖select权限
    grant select (id,sub_time),update (id) on db1.blog to 'xxx'@'%' identified by '123';

二 权限的相关操作

all可以代表除了grant之外的所有权限,可以用with带上grant,授权一个超级管理员

grant all on *.* to egon@'%' identified by '123' with grant option;
查看mysql.user表中可以查看到egon用户的grant权限也被设置成了Y

2.1 查看权限

1、查看当前用户权限
show grants;
2、查看其他mysql用户权限
show grant for root@'%';

2.2 撤销权限

1、revoke跟grant的语法差不多,只需要把关键字"to"换成"from"即可
grant all on *.* to dba@localhost;
revoke all on *.* from dba@localhost;
revoke select on db1.* from 'egon'@'%';

2.3 扩展授权(了解)

max_queries_per_hour:一个用户每小时可发出的查询数量
max_updates_per_hour:一个用户每小时可发出的更新数量
max_connections_per_hour:一个用户每小时可连接到服务器的次数
max_user_connections:允许同时连接数量

mysql> grant all on *.* to test@'%' identified by '123' with max_user_connections 1;

# 测试:
mysql -utest -p123 -h192.168.15.100

不要用-hlocalhost,它代表通过本地套接字链接

2.4 针对不同角色的权限分配

2.4.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@'%'

2.4.2 针对开发人员

grant数据库开发人员,创建表、索引、视图、存储过程、函数…等权限,具体如下

1、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.%';

2、grant操作mysql外键权限
grant references on testdb.* to developer@'192.168.0.%';

3、grant操作mysql临时表权限
grant create temporary tables on testdb.* to developer@'192.168.0.%';

4、grant操作mysql索引权限
grant index on testdb.* to developer@'192.168.0.%';

5、grant操作mysql视图、查看视图源代码权限
grant create view on testdb.* to developer@'192.168.0.%';
grant show view on testdb.* to developer@'192.168.0.%';

6、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 routine on testdb.* to developer@'192.168.0.%';

也有一个省事的方法,直接给all就完了
grant all on testdb.* to developer@'192.168.0.%';

2.4.3 针对普通DBA

grant普通DBA管理某个MySQL数据库的权限
grant all on testdb.* to dba@'localhost'

2.4.4 针对高级DBA

grant高级DBA管理mysql中所有数据库的权限
grant all on *.* to dba@'localhost'

2.5 在企业中权限的设定

#开发人员说:请给我开一个用户
#1.首先进行沟通
    1.你需要对哪些库、表进行操作
    2.你从哪里连接过来
    3.用户名有没有要求
    4.密码要求
    5.你要使用多长时间
    6.发邮件
#2.一般给开发创建用户权限,建议不给delete权限
grant select,update,delete,insert on *.* to egon@'10.0.0.%'' identified by '123';
#3.注意:
开发图方便想要root用户,这玩意,谁给谁背锅,自己斟酌,可以考虑让部门老大来给

三 破解密码

linux平台

方法一:启动时,跳过授权库

[root@egon ~]# vim /etc/my.cnf    #mysql主配置文件
[mysqld]
skip-grant-table

[root@egon ~]# systemctl restart mariadb

[root@egon ~]# mysql
MariaDB [(none)]> update mysql.user set password=password("123") where user="root" and host="localhost";
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> q

[root@egon ~]# #打开/etc/my.cnf去掉skip-grant-table,然后重启
[root@egon ~]# systemctl restart mariadb
[root@egon ~]# mysql -u root -p123  # 以新密码登录

方法二

# 1、先关闭数据库服务
方式一
systemctl stop mysql
方式二
mysqladmin -uroot -p123 -S /tmp/mysql.sock shutdown

# 2、跳过授权表启动mysql
mysqld_safe --skip-grant-tables --skip-networking &

ps:还需要跳过网络,否则在操作过程中很不安全

# 3、登录并修改密码
[root@egon ~]# mysql
MariaDB [(none)]> update mysql.user set password=password("123") where user="root" and host="localhost";
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> q

# 4、重启服务
systemctl start mysql

# 5、用修改后的密码登录即可

暂无评论

发表评论
OωO表情