背景:没有划分数据库权限,所有人共用一个账号

本人公司现有的数据库账号分布情况:

所有人用一个账号(包括程序里面访问数据库的的配置文件里面的账号),该账号除删库权限,其他权限大部分都有。

这样非数据库管理员也可修改数据库,非常不安全。所以想划分权限。

思路:创建3个账号,不同的人用不同账号

一个管理员账号(DBA用,拥有最高权限)

一个账号程序上用(只有增删查改以及调用存储过程函数等权限)

一个账号给程序员用(只有查看权限)

环境:基于阿里云上的RDS实例 (MYSQL)

上面提到的账号是没有创建用户以及删库等权限的,如果需要创建用户等,则需要“创建高权限账号”

步骤:创建“高级权限账号”、程序上访问数据库的账号、只读账号

创建高级权限账号zhangm(相当于管理员账号,但是权限也还是有限制)

登录该“高权限账号”zhangm,创建只读权限用户user1

mysql> create user user1 IDENTIFIED by '123456';
Query OK, 0 rows affected (0.00 sec)

登录用户user1账号

[root@zhangmeng ~]# mysql  -u user1 -p 123456

查看数据库,发现只能看到information_schema库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.01 sec)

并且登录这个库,不能看到其他库的对象信息,只能看到该库的对象信息。

mysql> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> select * from information_schema.`TABLES`where TABLE_SCHEMA='mofiman';
Empty set (0.01 sec)
mysql>
mysql> select * from information_schema.`TABLES`where TABLE_SCHEMA='mysql';
Empty set (0.01 sec)
mysql>
mysql> select distinct TABLE_SCHEMA from information_schema.`TABLES`;
+--------------------+
| TABLE_SCHEMA       |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.01 sec)

如果我们想给用户user1修改密码,该“高权限用户”没有直接修改的权限,只能通过删除用户,再新建用户

mysql> set password for user1 =password('abc123');
ERROR 1044 (42000): Access denied for user 'zhangm1'@'%' to database 'mysql'
mysql>
mysql> drop user user1;
Query OK, 0 rows affected (0.00 sec)mysql>
mysql> create user user1 IDENTIFIED by 'abc123';
Query OK, 0 rows affected (0.00 sec)

查看user1用户的权限,我们没有给该用户分配任何权限,可以看到,该用户默认拥有USAGE权限(登录数据库权限)

mysql> mysql> show grants for user1 \G;
*************************** 1. row ***************************
Grants for user1@%: GRANT USAGE ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*6691484EA6B50DDDE1926A220DA01FA9E575C18A'
1 row in set (0.01 sec)

我准备给user1用户授予查询权限,首先创建一个测试库test,创建一个临时表叫tmp_1,插入几条测试数据

mysql> use test;
Database changed
mysql> create table tmp_1(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into tmp_1 values(1,'zm');
Query OK, 1 row affected (0.01 sec)mysql> insert into tmp_1 values(2,'lly');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tmp_1 values(3,'jzj');
Query OK, 1 row affected (0.01 sec)mysql> insert into tmp_1 values(4,'fw');
Query OK, 1 row affected (0.00 sec)

mysql> select * from tmp_1;
+------+------+ | id | name | +------+------+ | 1 | zm | | 2 | lly | | 3 | jzj | | 4 | fw | +------+------+ 4 rows in set (0.01 sec)

我们登录user1用户访问数据库test的tmp_1表(以下ip已做处理),提示没有权限

mysql> select * from test.tmp_1;
ERROR 1142 (42000): SELECT command denied to user 'user1'@'192.168.1.1' for table 'tmp_1'

登录“高权限账号”zhangm给user1用户授权查询数据库test所有表的权限(若想精确只授予某个表可以把数据库后面的*改成指定表名)

mysql> grant select on test.*  to user1;
Query OK, 0 rows affected (0.01 sec)

登录user1账号,访问test数据库,发现可以看到test库,并且可以访问表tmp_1,但是如果执行删除操作,会提示没有权限

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.01 sec)mysql> select * from test.tmp_1;
+------+------+
| id   | name |
+------+------+
|    1 | zm   |
|    2 | lly  |
|    3 | jzj  |
|    4 | fw   |
+------+------+
4 rows in set (0.00 sec)mysql> delete from test.tmp_1 where id=1;
ERROR 1142 (42000): DELETE command denied to user 'user1'@'192.168.1.1' for table 'tmp_1'
mysql> 

如果想撤回该权限用 revoke,至此,我们已完成只读用户user1的创建。

至此,只读用户user1的权限分配完成!

mysql> revoke  select on test.*  from  user1;
Query OK, 0 rows affected (0.01 sec)

接下来我们创建程序上用的账号user2(增删查改权限,如有必要添加执行函数和存储过程的权限)

mysql> grant select,update,delete,insert on test.* to user2;
Query OK, 0 rows affected (0.01 sec)

登录账号user2可以查询数据库test的表tmp_1,并且可以插入数据

mysql> select * from test.tmp_1;
+------+------+
| id   | name |
+------+------+
|    1 | zm   |
|    2 | lly  |
|    3 | jzj  |
|    4 | fw   |
+------+------+
4 rows in set (0.00 sec)mysql>
mysql> insert into test.tmp_1 values(5,'yzw');
Query OK, 1 row affected (0.01 sec)

以上相同部分不在撰述,主要讲一下执行存储过程和函数的权限,所以我们需要分别创建一个简单的存储过程和函数来做测试

在登录“高权限账号”zhangm数据库test创建一个简单的存储过程,发现declare names varchar(20);后面报错,原因是后面带了分号,mysql以为这个语句结束了

mysql> drop PROCEDURE if EXISTS sp_tmp1;
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> CREATE PROCEDURE sp_tmp1()-> BEGIN-> declare names varchar(20);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
mysql>    set @names='';
Query OK, 0 rows affected (0.01 sec)

正确的创建方法是用分隔符  DELIMITER //..... //,

mysql> DELIMITER //
mysql> drop PROCEDURE if EXISTS sp_tmp1;-> CREATE PROCEDURE sp_tmp1()-> BEGIN-> declare names varchar(20);->    set @names='zm';->    select @names;-> END -> //
Query OK, 0 rows affected, 1 warning (0.00 sec)Query OK, 0 rows affected (0.00 sec)

函数的创建也是一样的

mysql> DELIMITER //
mysql> drop FUNCTION if EXISTS  fc_tmp1;-> CREATE  FUNCTION  fc_tmp1 (num INT )  -> RETURNS VARCHAR(20)  -> BEGIN  ->     RETURN  (SELECT  name  ->     FROM  tmp_1  ->     WHERE  id=num );  -> END -> //
Query OK, 0 rows affected, 1 warning (0.00 sec)Query OK, 0 rows affected (0.00 sec)

登录user2的账号,调用存储过程和函数,提示没有权限

mysql> call test.sp_tmp1();
ERROR 1370 (42000): execute command denied to user 'user2'@'%' for routine 'test.sp_tmp1'
mysql>
mysql> select test.fc_tmp1(1);
ERROR 1370 (42000): execute command denied to user 'user2'@'%' for routine 'test.fc_tmp1'
mysql>

授予user2用户调用存储过程和函数的权限

mysql> grant execute on test.* to user2;
Query OK, 0 rows affected (0.00 sec)

登录user2账号,执行存储过程和函数

至此,程序上访问数据库的账号user2的权限分配完成!

mysql> call test.sp_tmp1();
+--------+
| @names |
+--------+
| zm     |
+--------+
1 row in set (0.01 sec)Query OK, 0 rows affected (0.01 sec)mysql> select test.fc_tmp1(1);
+-----------------+
| test.fc_tmp1(1) |
+-----------------+
| zm              |
+-----------------+
1 row in set (0.01 sec)

说明:本文为本人原创,部分内容可能参考网上的资料,转载请注明出处,可能有写的不够准确的地方,欢迎指正。

转载于:https://www.cnblogs.com/xphdbky/p/7373874.html

【MYSQL权限】数据库权限部署相关推荐

  1. mysql 授予数据库权限_MySQL:授予**对数据库的所有**权限

    我创建了数据库,例如'mydb'. CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin; CREATE USER 'myuser'@'%' ...

  2. 数据库权限的分配与回收

    数据安全的最重要措施就是数据库账号的权限管理,通常情况下数据库账号会分配给应用程序.开发人员以及数据库管理员(DBA),还有可能分配给其他需要利用数据进行分析的非技术人员. 数据库权限 数据库权限主要 ...

  3. 阿里云 mysql 强制查主库_mysql数据库权限查询

    mysql数据库权限查询 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Servi ...

  4. MySQL数据库权限管理

    Mysql数据库的运维主要包括用户权限的设置,数据库的备份与恢复. 一.授予权限 GRANT 权限列表 ON 库名.表名 TO 用户名@来源地址 {IDENTIFIED BY '密码'}br/> ...

  5. mysql权限层级体系_数据库mysql有哪些权限?层级有哪些?

    我们想要运行一个文件时,有时候会出现只有管理员才能打开这类软件,这就是权限对于用户的限制.那么在我们最近学习的数据库mysql中,也有这样的权限需要我们去注意吗?小编想说当然有,而且还不少!今天就数据 ...

  6. mysql导入数据库之后触发器没有权限_MYSQL设置触发器权限问题的解决方法

    本文实例讲述了MYSQL设置触发器权限的方法,针对权限错误的情况非常实用.具体分析如下: mysql导入数据提示没有SUPER Privilege权限处理,如下所示: ERROR 1419 (HY00 ...

  7. mysql数据库权限赋予

    先设置该用户只有show database权限 grant select,insert,update,delete on redmine1.* to jira@"%" identi ...

  8. mysql数据库权限查询_mysql数据库权限管理

    mysql数据库权限管理 # 查看权限 # 使用mysql数据库 mysql> use mysql; # 查看所有用户和权限 # 查询主机用户名密码:5.7版本之前的 mysql> sel ...

  9. x509mysql_涂抹mysql笔记-数据库中的权限体系

    涂抹mysql笔记-数据库中的权限体系 <>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确. mysql验证用户需要检查3项值:用户名.密码和主机来源(user.passwor ...

最新文章

  1. 网上整理的对于Rest和Restful api的理解
  2. ubuntu禁用锁屏
  3. Scala 中的文件操作
  4. 把hive数据导出至mysql
  5. 【经典回放】JavaScript学习详细干货笔记之(一)
  6. Virtuoso崩掉时layout数据恢复
  7. 原生js调用json方法
  8. 2017-06-23
  9. java环境变量的配置_一文带你学会Java环境变量配置(小白向)
  10. python装饰器不错的教程
  11. 新站结合熊掌号的实际操作 实现当天收录
  12. nginx + tomcat 架构中,页面跳转,URL不变,网页内容变
  13. span 居中_H5元素的水平垂直居中布局总结
  14. c++语言游戏存档,使用C++ fopen制作 iPhone 游戏存档
  15. 导入和导出requirement
  16. fremaker遍历list_Freemarker中如何遍历List
  17. linux修改文件图标,Gnome怎么修改应用图标icon
  18. stackoverflow 搜索问题技巧
  19. 红队渗透测试技术:如何通过鱼叉式网络钓鱼获得攻击机会?
  20. Ubuntu安装软件是始终出现dpkg错误(转载,原文链接:https://blog.csdn.net/cyf15238622067/article/details/53534629)

热门文章

  1. java中的与或运算
  2. ASP.NET2.0 HiddenField控件
  3. 【Vue】—列表渲染v-for指令
  4. Error: Cannot create file “D:xampp\xampp-controlin“.拒绝访问。
  5. 前端—每天5道面试题(4)
  6. 返回封装结果集Result
  7. hihoCoder 1175 拓扑排序
  8. 九日登望仙台呈刘明府 [唐] 崔曙
  9. 为什么把钱花在别人身上更幸福?
  10. 老程序员提给后浪程序员的职涯建议