精华内容
下载资源
问答
  • 在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserAGRANT VIEW DEFINITION ON ProcedureName TO UserA; --用具体的存储...

    在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限给某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserA

    GRANT VIEW DEFINITION ON ProcedureName TO UserA; --用具体的存储过程名和账号替换

    那么在MySQL中能否实现这个功能呢? 找了很多资料,没有看到有这方面的功能,官方文档没有涉及这样的权限,网上有个方法:可以通过授予用户查询mysql.proc这样的权限来间接实现这个功能

    grant select on mysql.proc to usrname@'xxx.xxx.xxx.xxx';

    个人简单测试了一下,这样授权后,发现还是有一些其他问题。

    mysql> show create procedure prc_insert;  --没有授权前报这个错误。

    ERROR 1305 (42000): PROCEDURE prc_insert does not exist

    mysql> show create procedure prc_insert\G; --授权后

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

    Procedure: prc_insert

    sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `prc_insert`(in  cnt int)

    begin

    declare i int;

    set i=1;

    while i < cnt do

    insert into test(id, name) select i,  CONCAT('name',i) from dual;

    set i = i+1;

    end while;

    end

    character_set_client: utf8

    collation_connection: utf8_general_ci

    Database Collation: latin1_swedish_ci

    1 row in set (0.00 sec)

    ERROR:

    No query specified

    问题1:这样授权后,你能看到所有数据库存储过程的定义(不仅仅是某个某个存储过程,或某个数据库的存储过程的定义), 这里就涉及一个权限放大的问题。例如,我本来打算只授予用户A查看存储过程PRC_A的定义权限,但是那样授权后,A能查看很多存储过程的定义,甚至还能查看一些没有访问权限数据库的存储过程的权限。严格意义上来说,这个授权是不合理的,而且是有问题的。

    问题2:MySQL 8.0开始抛弃了mysql.proc,而且从MySQL 8.0开始,如果你要用SHOW CREATE PROCEDURE或SHOW CREATE FUNCION的话,需要有什么权限呢?。

    MySQL 8.0开始,存储过程存储在mysql.routines和mysql.parameters这些系统表中,但是这些表无法直接访问,只能访问INFORMATION_SCHEMA.ROUTINES。像MySQL 8.0之前那样的授权行不通了,

    Where are stored procedures stored?

    Stored procedures are stored in the mysql.routines and mysql.parameters tables, which are part of the data dictionary. You cannot access these tables directly. Instead, query the INFORMATION_SCHEMA ROUTINES and PARAMETERS tables. See Section 25.29, “The INFORMATION_SCHEMA ROUTINES Table”, and Section 25.19, “The INFORMATION_SCHEMA PARAMETERS Table”.

    You can also use SHOW CREATE FUNCTION to obtain information about stored functions, and SHOW CREATE PROCEDURE to obtain information about stored procedures. See Section 13.7.7.9, “SHOW CREATE PROCEDURE Statement”.

    个人测试发现,授予alter routine后,就能查看存储过程的定义,但是这个授权也带来一个问题,授予权限的用户不仅可以查看存储过程定义,而且可以删除这个存储过程(这个也是一个问题)。这个当然,不清楚是否还有其它授权来实现。

    mysql> grant alter routine on procedure MyDB.prc_2 TO test@'192.168%';

    Query OK, 0 rows affected (0.08 sec)

    mysql>

    问题3:在MySQL 8.0, 如果用户test创建存储过程的时候,指定了DEFINER(没有指定的不会有这个问题), 然后对于用户test2,即使授予了ALTER ROUTINE,那么它依然无法查看这些存储过程定义(网友反馈),如下测试所示:

    CREATE DEFINER=`test`@`192.168%`  PROCEDURE PRC_TEST1(CNT  INT)

    BEGIN

    DECLARE V_LOOP INT;

    SET V_LOOP = CNT;

    WHILE V_LOOP>0 DO

    INSERT INTO TEST(NAME,CREATE_DATE)  VALUES(REPEAT('A',800),DATE_ADD(NOW(),INTERVAL -RAND()*100000 MINUTE) );

    SET V_LOOP = V_LOOP - 1;

    END WHILE;

    END

    test2用户,使用命令SHOW CREATE PROCEDURE PRC_TEST1查看存储过程定义为NULL,也就是说即使授予了ALTER ROUTINE权限,但是如果存储过程有指定DEFINER,这样依然无法看到存储过程的定义

    cd4ff83200721182261186b066788e2a.png

    mysql> show grants for test2@'192.168%';

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

    | Grants for test2@192.168%                                                     |

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

    | GRANT USAGE ON *.* TO `test2`@`192.168%`                                      |

    | GRANT SELECT, CREATE ROUTINE, ALTER ROUTINE ON `MyDB`.* TO `test2`@`192.168%` |

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

    2 rows in set (0.00 sec)

    总结:

    在MySQL5.7或之前版本,可以通过授予用户查询mysql.proc来间接实现查看存储过程定义的权限,在MySQL 8.0 可以通过授予用ALTER ROUTINE的权限来间接实现查看存储过程定义的权限(如果存储过程有指定DEFINER,此方法无效),两者都有一个问题,那就是会放大权限,这个属于MySQL功能性的缺陷,短时间估计一直存在!其实对于MySQL的存储过程,目前来说只有三种权限,而没有其它数据库VIEW DEFINITION之类的权限:

    ALTER ROUTINE   编辑或删除存储过程

    CREATE ROUTINE  创建存储过程

    EXECUTE         运行存储过程

    SQL Server中授予用户查看对象定义的权限

    SQL Server中授予用户查看对象定义的权限   在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数. ...

    Security4:授予查看定义,执行SP和只读数据的权限

    SQL Server数据库有完善的权限管理机制,对于存储过程,其权限分为查看定义,执行和修改,查看SP定义的权限是:VIEW DEFINITION ,执行存储过程的权限是:EXECUTE,修改SP的权 ...

    MySQL&sol;MariaDB数据库的存储过程

    MySQL/MariaDB数据库的存储过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.存储过程概述 1>.存储过程优势 存储过程把经常使用的SQL语句或业务逻辑封装起 ...

    mysql导出函数或者存储过程 设置显示方式

    mysql导出函数或者存储过程 mysqldump -hhostname -uusername -ppassword -ntd -R databasename > /app/backupflie ...

    查看mysql 的存储过程定义

    查询数据库中的存储过程 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' 方法 ...

    mysql存储过程的权限 definer

    mysql中用户对存储过程的权限有: ALTER ROUTINE 编辑或删除存储过程 CREATE ROUTINE 创建存储过程 EXECUTE运行存储过程 存储过程的创建者拥有存储过程的ALTER. ...

    MySQL存储过程定义中的特性(characteristic)的含义

    MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程 通常在使用图形界面工具进行存 ...

    mysql查看存储过程

    查询数据库中的存储过程 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' 方法 ...

    mysql视图和存储过程定义者修改脚本(懒人专用)

    前言: 在实际工作中mysql数据库的迁移.备份恢复.数据库重命名等一系列涉及到视图和存储过程定义者问题都会需要修改,每次都要从基础表获取数据,然后手工整理做脚本,十分麻烦,所以简单写了个过程,以后可 ...

    随机推荐

    ArcGIS API for Silverlight 使用GeometryService求解线与线的交点

    ///画线 void btn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Button btn = sender as B ...

    利用jar命令打包和解压

    常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了:而另一种是使用 JET 来进行 ...

    css3整理--clip

    clip语法: .selector { clip: rect | auto | inherit } 注意:clip属性只能在元素设置了“position:absolute”或者“position:fi ...

    zstu&period;4194&colon; 字符串匹配&lpar;kmp入门题&amp&semi;&amp&semi; 心得&rpar;

    4194: 字符串匹配 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 206  Solved: 78 Description 给你两个字符串A,B,请 ...

    &lbrack;Swust 549&rsqb;--变位词&lpar;vector水过&rpar;

    Time limit(ms): 1000 Memory limit(kb): 65535   Description 输入N和一个要查找的字符串,以下有N个字符串,我们需要找出其中的所有待查找字符串的 ...

    A1021&period; Deepest Root

    A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...

    Codeforces 1138 - A&sol;B&sol;C&sol;D&sol;E - &lpar;Undone&rpar;

    链接:https://codeforces.com/contest/1137 A - Skyscrapers 题解:对于每一段 $1$ 和每一段 $2$,统计他们的长度.因此对于相邻的两段长度求较小值 ...

    H5之localStorage&comma;sessionStorage

    在以前的时候也听说过一些h5缓存技术,具体也没有去使用过,就在前两三个礼拜我用了localStorage和sessionStorage这两个存储方式, 我使用这些存储技术,也是想减少访问服务器的请求, ...

    css:在容器内文字超过容器范围,显示一行加省略号或者两行加省略号

    一.显示一行加省略号:各浏览器兼容 .box{ width: 100px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; } ...

    展开全文
  • MySQL查看用户权限及权限管理

    万次阅读 多人点赞 2019-10-22 15:47:55
    一、 MySQL权限级别介绍 全局——可以管理整个MySQL 库——可以管理指定的数据库 表——可以管理指定数据库的指定表 字段——可以管理指定数据库的...二、查看用户权限 1、查看所有用户(用户名、谁授权)...

    一、 MySQL权限级别介绍

    1. 全局——可以管理整个MySQL
    2. 库——可以管理指定的数据库
    3. 表——可以管理指定数据库的指定表
    4. 字段——可以管理指定数据库的指定表的指定字段

    权限存储在mysql库的user, db, tables_priv, columns_priv, procs_priv这几个系统表中,待MySQL实例启动后就加载到内存中

    二、查看用户权限

    1、查看所有用户(用户名、给谁授权)

    SELECT user,host FROM mysql.user;
    

    在这里插入图片描述
    2、查看单个用户所有情况

    SELECT * FROM mysql.user WHERE user='root'\G
    

    \g 相当于’;’
    \G使每个字段打印到单独的行,也有’;'的作用
    在这里插入图片描述
    用户信息:授权对象,连接用户名,用户密码

    Host: %		# 授权用户,% 代表所有
    User: root	# 用户名
    authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9	#密码,MD5加密
    

    授权信息

    Select_priv:确定用户是否可以通过SELECT命令选择数据 
    Insert_priv:确定用户是否可以通过INSERT命令插入数据 
    Update_priv:确定用户是否可以通过UPDATE命令修改现有数据 
    Delete_priv:确定用户是否可以通过DELETE命令删除现有数据 
    Create_priv:确定用户是否可以创建新的数据库和表 
    Drop_priv:确定用户是否可以删除现有数据库和表 
    Reload_priv:确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表 
    Shutdown_priv:确定用户是否可以关闭MySQL服务器,将此权限提供给root账户之外的任何用户时,都应当非常谨慎 
    Process_priv:确定用户是否可以通过SHOW 
    File_priv:确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令 
    Grant_priv:确定用户是否可以将已经授予给该用户自己的权限再授予其他用户,例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户 
    References_priv:目前只是某些未来功能的占位符,现在没有作用 
    Index_priv:确定用户是否可以创建和删除表索引 
    Alter_priv:确定用户是否可以重命名和修改表结构 
    Show_db_priv:确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库,可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因 
    Super_priv:确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令 
    Create_tmp_table_priv:确定用户是否可以创建临时表 
    Lock_tables_priv:确定用户是否可以使用LOCK 
    Execute_priv:确定用户是否可以执行存储过程,此权限只在MySQL 5.0及更高版本中有意义 
    Repl_slave_priv:确定用户是否可以读取用于维护复制数据库环境的二进制日志文件,此用户位于主系统中,有利于主机和客户机之间的通信 
    Repl_client_priv:确定用户是否可以确定复制从服务器和主服务器的位置 
    Create_view_priv:确定用户是否可以创建视图,此权限只在MySQL 5.0及更高版本中有意义 
    Show_view_priv:确定用户是否可以查看视图或了解视图如何执行,此权限只在MySQL 5.0及更高版本中有意义 Create_routine_priv:确定用户是否可以更改或放弃存储过程和函数,此权限是在MySQL 5.0中引入的 Alter_routine_priv:确定用户是否可以修改或删除存储函数及函数,此权限是在MySQL 5.0中引入的 Create_user_priv:确定用户是否可以执行CREATE 
    Event_priv:确定用户能否创建、修改和删除事件,这个权限是MySQL 5.1.6新增的 
    Trigger_priv:确定用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的
    Create_tablespace_priv: 创建表的空间
    

    权限表
    在这里插入图片描述

    三、授权

    每次更新权限后记得刷新权限
    FLUSH PRIVILEGES;

    格式:

    GRANT
      [权限] 
    ON [.] 
    TO [用户名]@[IP] 
    IDENTIFIED BY [密码] 
    # WITH GRANT OPTION;
    

    GRANT命令说明:
    (1)ALL PRIVILEGES 表示所有权限,你也可以使用select、update等权限。
    (2)ON 用来指定权限针对哪些库和表。
    (3)*.* 中前面的号用来指定数据库名,后面的号用来指定表名。
    (4)TO 表示将权限赋予某个用户。
    (5)@ 前面表示用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。
    (6)IDENTIFIED BY 指定用户的登录密码。
    (7)WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。

    注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
    备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。

    1、全局授权(直接把 root 限制主机改为 %,任意主机)
    因为 root 是数据库用户默认最高权限

    UPDATE mysql.user SET user.Host='%' where user.User='root';
    FLUSH PRIVILEGES;
    

    当然也可以新建一个用户,给与全部权限

    GRANT
      ALL PRIVILEGES
    ON *.*
    TO admin@'175.155.59.133'
    IDENTIFIED BY 'admin';
    

    这样你就可以在远程连接到该数据库,且获取全部权限。
    在这里插入图片描述
    2、单个数据库授权

    只给175.155.59.133这个 IP 赋给 ctrip 数据库 查询的权限,用户:ctrip,密码:ctrip

    GRANT
      select
    ON ctrip.*
    TO ctrip@'175.155.59.133'
    IDENTIFIED BY 'ctrip';
    

    声明:
    (1)用ipconfig查询出来的IP,那是局域网的,这么设置只能局域网内使用,
    (2)要想服务器和本机连接,IP 必须是网关的IP,推荐使用 https://www.ipip.net/ 查询自己的 IP。
    在这里插入图片描述
    可以看到本机连接有 ctrip 数据库和一个数据库本身库,而看不到其他库。注意此时可以看到两个表。
    在这里插入图片描述
    在这里插入图片描述

    3、单个数据库单个表授权

    GRANT
      select
    ON ctrip.t_plane
    TO ctrip@'175.155.59.133'
    IDENTIFIED BY 'ctrip';
    

    可以看到只有一个表显示出来,注意现在字段
    在这里插入图片描述
    4、单个数据库单个表授权某些字段授权

    GRANT
      select(id,EN)
    ON ctrip.t_plane
    TO ctrip@'175.155.59.133'
    IDENTIFIED BY 'ctrip';
    

    这样做的话,我们是连表都是打不开的,只能通过查询语句,查出对我们开放的字段
    在这里插入图片描述

    四、收回权限、删除用户

    1、收回权限
    格式:

    REVOKE
      [权限] 
    ON [.] 
    FROM [用户名]@[IP];
    

    操作:

    REVOKE
      select(id,EN)
    ON ctrip.t_plane
    FROM ctrip@'175.155.59.133';
    

    2、删除用户
    格式:

    DROP USER [用户名]@[IP];
    

    操作:

    DROP USER ctrip@'175.155.59.133';
    
    展开全文
  • 在本篇文章里小编大家整理的是一篇关于mysql查看用户授权信息的具体方法,有需要的朋友们可以参考下。
  • linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤销权限linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤销权限root权限高...

    linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤

    linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤销权限

    linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤销权限

    root权限高,安全性考虑,一般只允许本地(本机)访问,不建议直接用于远程,那就需要创建权限用户来远程连接数据库。

    步骤1:登录数据库

    mysql -uroot -p 或 mysql -u root -p

    -u表示user(用户名),-p表示password(密码)需要输入密码,如下效果

    如果是第一次登录,则直接回车;

    256d45069c93868182895ea0a3dd11f5.png

    登录数据库成功后如下:

    f586cd4026c540454c656f92846fb9d4.png

    步骤2:创建数据库用户

    CREATE USER erp IDENTIFIED BY 'erpdatapwd';

    CREATE USER [email protected] IDENTIFIED BY 'erpdatapwd';

    上一句命令创建用户可用于其他远程数据库连接工具连接,

    下一句仅允许本地(本机)登录,

    依情况而定。

    6a8160110a59ba0622089e38d2c1b2d7.png

    步骤3:给创建的数据库用户指定权限

    GRANT ALL PRIVILEGES ON *.* TO user;

    GRANT ALL PRIVILEGES ON *.* TO user;@localhost

    90e13b1dc2997a13d75eae7e9c5fe433.png

    98bbdf3a52d0237453726c618915899b.png

    步骤4:查看用户

    select host,user from mysql.user;

    4c760c1045fb04e472c8396b068d236b.png

    上图说明我们创建的数据用户已完成,下图为数据库工具连接情况,表示远程连接成功!

    3fab2736d035d8db692632a4e07593c9.png

    步骤5:删除数据用户

    先输入步骤4个查看用户,如下图,我们删除下图中的用户名为user的用户:

    cbb9de8549acf352c9148b31fc9fe59f.png

    DROP USER ‘user’@'%';

    814fc4fe05ea345a78c27962151e9cd2.png

    从图中可以看到,用户名是‘user’,host是%

    执行完查看下,如下图:

    dff313212b07db1e2edaa7014ea0bbc7.png

    用户删除成功!

    顺便刷新下权限

    flush privileges;

    【非必需】拓展延伸:以上部分可用其他命令操作:

    如查看用户: select user from mysql.user;

    如查看用户所有: select * from mysql.user;

    如删除用户:

    delete from mysql.user where user=‘XXX’ and host=’%’;

    根据以上方式,设置修改用户密码:

    SET PASSWORD FOR ‘username’@‘host’ = PASSWORD(‘newpassword’);

    设置当前用户的密码:

    SET PASSWORD = PASSWORD(‘newpassword’);

    撤销用户权限:

    命令:REVOKE privileges ON database.tablename FROM ‘username’@‘host’;

    注意:

    若给权限是这样写: GRANT SELECT ON . TO ‘erp’@‘%’;

    则用 REVOKE SELECT ON database.tablename TO ‘erp’@‘%’;是不能撤销用户erp 对 database.tablename中的SELECT erp的。

    相反的 GRANT SELECT ON database.tablename TO ‘erp’@‘%’;授予权限

    用 REVOKE SELECT ON . FROM ‘erp’@‘%’;也是不能用来撤销用户erp 对database库的tablename 表的SELECT 权限

    linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤相关教程

    Maxwell采集binlog系列(结完)-Linux系统安装Maxwell,采集binl

    Maxwell采集binlog系列(结完)-Linux系统安装Maxwell,采集binlog 百度云盘安装包链接:https://pan.baidu.com/s/1zVFX6RSBs-ED4PkVG1CPOQ 提取码:9co6 MySQL开启binlog 1.修改配置文件 vi /etc/my.cnf [mysqld]下面添加如下内容 server_id=1log-bin=master

    centos7防火墙设置

    centos7防火墙设置 查看开放端口 firewall-cmd --zone=public --list-ports 新增开放端口并重载 firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reload 查看开放端口 firewall-cmd --zone=public --query-port=3306/tcp 移除开放

    mysql 安装教程

    mysql 安装教程 如果电脑之前装了其他版本的mysql,先卸载干净 1.开始,windows管理工具,服务 停止mysql应用。 2.在控制面板卸载mysql 将mysql相关联的全部卸载干净 3.将之前安装目录下的mysql目录删除,如果存在的话 4.运行regedit 将mysql目录删除 5.HKEY

    MySQL数据库系统

    MySQL数据库系统 简介 ? Apache HTTP Server作为优秀的Web服务器软件,提供了面向用户的前端应用功能。而在实际 的企业网站平台中,为了提供更丰富.更强大的Web应用功能,往往还需要有后台数据库、网页编 程语言等多种角色的支持。 基础认识 ? MySQL是一个

    Linux 服务器(命令行)安装TensorFlow-GPU 用python虚拟环境

    Linux 服务器(命令行)安装TensorFlow-GPU 用python虚拟环境 ??研究生第二年了,无论是windows还是linux环境,安装TensorFlow-GPU已经好多次了,第一次纯靠自己安装成功,正值国庆期间比较轻松,写个博客记录一下。 ??本次安装主要参考这个博客,但是中间好

    vmware16虚拟机配置centos7网络

    vmware16虚拟机配置centos7网络 1)使用桥接模式 2)查看本机电脑配置 3)配置虚拟机网络 1.打开虚拟机网络配置文件,vim /etc/sysconfig/network-scripts/ifcfg-ens33 2.配置如下 4)测试是否能上网,能成功上网

    centos7.4中搭建MySQL数据库

    centos7.4中搭建MySQL数据库 大家好,今天我们来搭建一个MySQL小型数据库,先来简单介绍一下mysql数据库。 1、数据库的作用:存储海量结构化数据 减少数据冗余 方便数据共享 2、数据库的类型:关系型数据库 非关系型数据库 3、常见的关系型数据库 1】Oracle

    Linux - LVM逻辑卷的创建与扩容

    Linux - LVM逻辑卷的创建与扩容 LVM介绍 全称逻辑卷管理器(Logic Volume Manager)。是在内核中块设备和物理设备之间添加的一个新的抽象层次。通过LVM,可以将几块磁盘(物理卷PV)组合形成一个存储池或卷组(VG),最终在卷组的基础上再划分逻辑卷。 LVM管理着

    展开全文
  • 在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserAGRANT VIEW DEFINITION ON ProcedureName TO UserA; --用具体的存储...

    在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限给某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserA

    GRANT VIEW DEFINITION ON ProcedureName TO UserA; --用具体的存储过程名和账号替换

    那么在MySQL中能否实现这个功能呢? 找了很多资料,没有看到有这方面的功能,官方文档没有涉及这样的权限,网上有个方法:可以通过授予用户查询mysql.proc这样的权限来间接实现这个功能

    grant select on mysql.proc to usrname@'xxx.xxx.xxx.xxx';

    个人简单测试了一下,这样授权后,发现还是有一些其他问题。

    mysql> show create procedure prc_insert;  --没有授权前报这个错误。

    ERROR 1305 (42000): PROCEDURE prc_insert does not exist

    mysql> show create procedure prc_insert\G; --授权后

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

    Procedure: prc_insert

    sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `prc_insert`(in  cnt int)

    begin

    declare i int;

    set i=1;

    while i < cnt do

    insert into test(id, name) select i,  CONCAT('name',i) from dual;

    set i = i+1;

    end while;

    end

    character_set_client: utf8

    collation_connection: utf8_general_ci

    Database Collation: latin1_swedish_ci

    1 row in set (0.00 sec)

    ERROR:

    No query specified

    问题1:这样授权后,你能看到所有数据库存储过程的定义(不仅仅是某个某个存储过程,或某个数据库的存储过程的定义), 这里就涉及一个权限放大的问题。例如,我本来打算只授予用户A查看存储过程PRC_A的定义权限,但是那样授权后,A能查看很多存储过程的定义,甚至还能查看一些没有访问权限数据库的存储过程的权限。严格意义上来说,这个授权是不合理,而且是有问题的。

    问题2:MySQL 8.0开始抛弃了mysql.proc,而且从MySQL 8.0开始,如果你要用SHOW CREATE PROCEDURE或SHOW CREATE FUNCION的话,需要有什么权限呢?。

    MySQL 8.0开始,存储过程存储在mysql.routines和mysql.parameters系统表中,但是这些表无法直接访问,只能访问INFORMATION_SCHEMA.ROUTINES。像MySQL 8.0之前那样授权行不通了,

    Where are stored procedures stored?

    Stored procedures are stored in the mysql.routines and mysql.parameters tables, which are part of the data dictionary. You cannot access these tables directly. Instead, query the INFORMATION_SCHEMA ROUTINES and PARAMETERS tables. See Section 25.29, “The INFORMATION_SCHEMA ROUTINES Table”, and Section 25.19, “The INFORMATION_SCHEMA PARAMETERS Table”.

    You can also use SHOW CREATE FUNCTION to obtain information about stored functions, and SHOW CREATE PROCEDURE to obtain information about stored procedures. See Section 13.7.7.9, “SHOW CREATE PROCEDURE Statement”.

    个人测试发现,授予alter routine后,就能查看存储过程的定义,但是这个授权也带来一个问题,授予权限的用户不仅可以查看存储过程定义,而且可以删除这个存储过程(这个也是一个问题)。这个当然,不清楚是否还有其它授权来实现。

    mysql> grant alter routine on procedure MyDB.prc_2 TO test@'192.168%';

    Query OK, 0 rows affected (0.08 sec)

    mysql>

    总结:

    在MySQL5.7或之前版本,可以通过授予用户查询mysql.proc来间接实现查看存储过程定义的权限,在MySQL 8.0 可以通过授予用ALTER ROUTINE的权限来间接实现查看存储过程定义的权限,两者都有一个问题,那就是会放大权限,这个属于MySQL功能性的缺陷,短时间估计一直存在!

    0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • Linux下给mysql创建用户分配权限2018-02-27491.新建用户//登录MYSQL@>mysql -u root -p@>密码// 查看所有用户mysql> select * from mysql.user;//创建用户mysql> insert into mysql.user(Host,User,...
  • 如何用命令行给mySQL添加用户

    千次阅读 2020-07-27 10:20:17
    命令行netstat -ao | find “3306”, 查看MySQL默认端口号3306对应的进程id(pid)为30016: 使用tasklist | find “30016” 查看pid 30016的进程对应的应用程序名为mysqld.exe: where mysqld即可查询到mysqld.exe的...
  • 回顾今天的数据库实验⊂(ο・㉨・ο)⊃先新建一个测试数据库再创建个表填些数据一、查看用户查看用户并没有直接的SQL语句,而是进入 mysql 数据库的 user 表(这个mysql库和user表都是一开始就有的),直接用 select *...
  • linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤销权限 root权限高,安全性考虑,一般只允许本地(本机)访问,不建议直接用于远程,那就需要创建权限用户来远程连接数据库。 步骤1:登录数据库 mysql...
  • mysql 给用户授权

    2018-12-12 13:19:51
    用户管理 mysql&gt;use mysql; 查看 mysql&gt; select host,user,password from&nbsp;user&nbsp;; 创建 mysql&gt; create user &nbsp;zx_root &nbsp;&nbsp;IDENTIFIED&nbsp;by ...
  • 在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserA GRANT VIEW DEFINITION ON ProcedureName TO UserA; --用具体的...
  • -- 使用mysql 数据库 正式环境USE mysql-- 为mysql创建用户:waiyan 密码为:XXXXXCREATE USERwaiyan IDENTIFIED BY 'XXXXX';-- 查看用户waiyan的权限SELECT * FROM user WHERE user='waiyan' ;SHOW GRANTS FOR ...
  • 在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserAGRANTVIEWDEFINITIONON ProcedureName TO UserA; –用具体的存储过程...
  • 在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserAGRANTVIEWDEFINITIONONProcedureNameTOUserA; --用具体的存储过程名...
  • mysql 查看表空间show variables like '%innodb_data_file_path%';--创建undo日志文件组:CREATE LOGFILE GROUP logGroup1 ADD UNDOFILE 'E:J2EEMySQLlogGroup1_1.log'INITIAL_SIZE 512MUNDO_BUFFER_SIZE 64MENGINE ...
  • 权限相关表(mysql)1.MySQL权限作用可以限制用户访问哪些库、哪些表可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作可以限制用户登录的IP或域名可以限制用户自己的权限是否可以授权别的用户2...
  • mysql grant查看用户权限命令

    千次阅读 2016-04-13 09:46:12
    本文章来大家总结一些常用的来查看mysql用户权限命令的一些方法总结,在mysql查看用户权限命令是show grants for了,下面我来详细介绍grants这个命令,有需要了解的朋友可参考。 语句  代码如下 ...
  • 在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserAGRANTVIEWDEFINITIONONProcedureNameTOUserA; --用具体的存储过程名...
  • MySQL的系统数据库是“mysql”,不能误操作删除了,同样“mysql”数据库中的“user”表示系统用户管理表,也不能误操作删除了或者破坏了,如下图所示: 这里不大家讲语法,只是总结常见的使用(直接上干货,不...
  • Mysql给用户设置权限

    2019-05-21 17:56:56
    #配置只读用户,all表示所有权限GRANT SELECT ON miao_mu_data.* TO '用户名'@'%' IDENTIFIED by "密码"; #查看用户权限use mysql;select * from user; 转载于:https://blog.51cto.com/suyanzhu/2398144...
  • 在多用户的应用场景下,可能需要不同的用户分配不同的权限,用来提升系统的稳定性,比如常见:报表库只提供读权限,或者开放第三方的库,也只提供可读用户。2、用户管理基本描述MySQL用户信息存储在系统数据库...
  • mysql使用navicat指定用户授权查看数据库中的某些数据表
  • 查看用户权限 命令行进入MySQL之后,输入: use mysql; select host,user,password from user; 可以得到当前所有用户对应的权限域。 第一列就是具有权限的域,可以看到基本都是本地。有一个 %,它表示所有域,也...
  • 1、查看Grant_priv是Y还是N执行下面select * from mysql.user where User='root' and Host='%'\G;下图查看结果为Grant_priv是Y,如果是N,执行下面update mysql.user set Grant_priv='Y' where User='root' and Host...
  • 这是一个非常特殊的问题,有以下几种情况可能需要更改现网用户的密码: 现在数据库密码被扫描到密码属于弱密码内网安全管理机制要求需要阻止某些业务连接到MySQL中在MySQL8.0以前版本,给MySQL更改密码,明确写到...
  • Mysql数据库用户授权查看和新增

    千次阅读 2018-06-13 14:16:45
    1、查看MySQL用户权限:show grants for 用户名2、给用户授权GRANT &lt;privileges&gt; ON &lt;what&gt; TO &lt;user&gt; [IDENTIFIED BY "&lt;password&gt;"] [WITH ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,402
精华内容 560
关键字:

给mysql查看用户

mysql 订阅