菜单

MySQL用户执行存储过程的权

2018年11月16日 - MySQL

一、联结表

  数据论利用前文中之多少。

   MySQL中为用户执行存储过程的权限为EXECUTE

  1、子查询

  作为子查询的SELECT语句只能查询单个列。企图检索多独列将回到错误。

-- 作为查询条件使用
-- 查看TNT2订单对应的客户ip(order表)
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');
-- 根据TNT2订单的客户ip查看客户信息(cust表)
SELECT cust_name, cust_contact FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2'));
-- 作为计算字段使用
-- 计算每个客户的订单数据
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name;

  比如我们在称为也configdb的数据库下开创了如下存储过程,存储过程的定义者为user_admin

  2、创建链接

 图片示例  链接方式 关键字 语句示例
  内连接 INNER JOIN … ON SELECT <select_list> FROM A INNER JOIN B ON A.key = B.key
左外连接 LEFT JOIN … ON SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key
左外连接 LEFT JOIN … ON … WHERE B.key IS NULL SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL
右外连接 RIGHT JOIN … ON SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key
右外连接 RIGHT JOIN … ON … WHERE A.key IS NULL SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key WHERE A.key IS NULL
全外连接 UNION

SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key

UNION

SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key

全外连接 (WHER IS NULL) UNION … (WHER IS NULL)

SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL

UNION

SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key WHERE A.key IS NULL

   用例:

-- 笛卡尔积:n * m
-- SELECT * FROM vendors, products;
SELECT orders.cust_id, cust_name FROM orders CROSS JOIN customers;-- 没有WHERE子句
-- 内连接
-- SELECT * FROM vendors, products WHERE vendors.vend_id = products.vend_id;
SELECT * FROM vendors INNER JOIN products on vendors.vend_id = products.vend_id;
-- 左外连接(a),根据A表相应字段取列
SELECT orders.cust_id, cust_name FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id;
-- 左外连接b,只取A表中无B表相应字段的列
SELECT vendors.vend_id, vend_name, vend_country  FROM vendors LEFT JOIN products on vendors.vend_id = products.vend_id where products.vend_id IS NULL ORDER BY vend_id;
-- 右外连接(a),同左外连接(a)
SELECT orders.cust_id, cust_name FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id;
-- 右外连接(b),同左外连接(b)
SELECT customers.cust_id, cust_name FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL;

-- 全外连接,两者id相等的行和不相等的行都保留
SELECT customers.cust_id, orders.order_num FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id
UNION
SELECT customers.cust_id, orders.order_num FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id;
-- 全外连接,只保留两者id不相等的行,这里两个WHERE子句一样是因为customers的id字段完全包含orders中的字段
SELECT customers.cust_id, orders.order_num FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL
UNION
SELECT customers.cust_id, orders.order_num FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL

  use configdb;

  3、视图

  视图是虚构的发明。它仅含有使用时动态检索数据的询问,换言之,视图存储查询语句。保存查询语句子可以行使视图。视图的片规则:

  - 与表名一样,视图必须唯一命名。

  - 视图数目没有范围。

  - 为了创造视图,必须具备足够的走访权限。

  - 视图可以嵌套。

  - 视图查询中不用采用GROUP BY。

  - 视图不克引得,也非可知起关系的触发器或默认值。

-- 创建视图
-- CREATE VIEW viewname AS SELECT *
CREATE VIEW productcustomers AS SELECT cust_name, cust_contact, prod_id FROM customers, orders, orderitems WHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num;

CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems;

-- 执行视图查询时会首先执行视图
SELECT cust_name, cust_contact FROM productcustomers WHERE prod_id ='FB';
SELECT * FROM orderitemsexpanded WHERE order_num = 20009;
-- 删除视图
-- DROP VIEW viewname;
DROP VIEW productcustomers;

  drop procedure if exists sp_dev_test_user_add;

第二、存储过程

  delimiter $$

  1、存储过程

  CREATE DEFINER=`user_admin`@`%` PROCEDURE
`sp_dev_test_user_add`(

  1.简介

  存储过程是储存于数据库目录中的平截声明性SQL语句。它像是编程语言中的函数或者可实行代码块。通过声明一截可实施的SQL语句,既可免一行行的输入SQL语句,又足以将这段SQL语句重复使用。

  存储过程的独到之处:

  - 通常存储过程有助于增进应用程序的性。

  -
存储过程有助于削减应用程序和数据库服务器之间的流量,因为应用程序不必发送多个长的SQL语句,而只能发送存储过程的称谓与参数。

  - 存储的次第对其它应用程序都是可选用的与透明底。

  - 存储的次是安之。

  存储过程的毛病:

  -
如果运用大量储存过程,那么下这些囤积过程的每个连的内存使用量将见面大大增加。

  - 存储过程的组织使得开发具有复杂性工作逻辑的蕴藏过程易得更艰难。

  - 很不便调试存储过程。

  - 开发以及维护存储过程并无易于。

  in var_user varchar(30),

  2.使用

-- 创建存储过程
DELIMITER // -- DELIMITER // 和DELIMITER;用于划分一块范围来声明存储过程
CREATE PROCEDURE GetAllProducts()-- CRAET PROCEDURE 创建一个存储过程
   BEGIN-- 存储过程的主体的开始
   DECLARE id INT(20) DEFAULT 1003;-- DECLARE variable datatype(size) DEFAULT value,声明局部变量;它只能在BEGIN和END之间生效
    SET id = 1001;-- 变量赋值
   SELECT * FROM products WHERE vend_id = id;-- SQL语句
   END //-- 存储过程的主体的结束,结尾用//
DELIMITER ;

-- 调用存储过程
CALL GetAllProducts();
-- 删除存储过程
DROP PROCEDURE IF EXISTS `GetAllProducts`;

-- 设置参数
DELIMITER //
CREATE PROCEDURE GetProductsByVendId(IN id INT(20), OUT outcome VARCHAR(20))-- 参数默认前缀是IN,即只允许调用函数时给参数传递值;OUT则表示将存储过程的运行结果传递出去,它是个单值参数;
    BEGIN
    SELECT count(*) INTO outcome FROM products WHERE vend_id = id;
    END //
DELIMITER ;
CALL GetProductsByVendId(1003, @outcome);-- 不直接打印结果,而是把结果传递给了全局变量@outcome
SELECT @outcome;-- 设置全局变量可以用SET variable = value;

-- 条件语句
/* IF condition THEN 
    sql
ELSEIF condition THEN
    sql
...
ELSE 
    sql
END IF */

DELIMITER //
CREATE PROCEDURE GetPriceLevel(IN prod_id CHAR(10), OUT price_level VARCHAR(20))
    BEGIN
    DECLARE price DECIMAL(8,2);
    SELECT prod_price INTO price FROM products WHERE products.prod_id = prod_id;

    IF price <= 5 THEN
        SET price_level = 'cheap';
    ELSEIF (price > 5 AND price <= 10) THEN
        SET price_level = 'ordinary';
    ELSE
        SET price_level = 'expensive';
    END IF;
    END //
DELIMITER ;
CALL GetPriceLevel('ANV01', @price_list);
SELECT @price_list;

-- 循环语句
/* WHILE condition DO
   statements
END WHILE */
-- 函数 略
-- 游标 https://www.yiibai.com/mysql/cursor.htm

  in var_ip varchar(15),

  2、事务处理

  in var_username varchar(30),

  1.概念

  事务处理(transaction
processing)用于保证SQL操作的完整性。它提供相同种处理机制来应本着SQL或者其他环境因素可能致的杀结果。事务处理中之几个术语:

  - 事务(transaction),指一组SQL语句。

  - 回退(rollback),指撤销指定SQL语句的过程。

  - 提交(commit),指以不存储的SQL语句结果来人多少库表。

  -
保留点(savepoint),指事务处理中安的临时占位符(placeholder),它好回退。

  事务处理用来保管(可以回退)INSERT、UPDATE和DELETE语句,不可知转退SELECT语句,也非能够扭转退CREATE或者DROP操作。

  以MySQL中,事务开始运用COMMIT或ROLLBACK语句子开始工作同收。开始与了语句的SQL命令中形成了大量的事情。

  in var_email varchar(30),

  2.ACID特性

  事务有以下四只专业属性的缩写ACID,通常被叫作:

  - 原子性:
指事务是一个不得再分割的劳作单元,事务中的操作还是都有,要么都未有。

  - 一致性:
在业务开始前和事情了以后,数据库的完整性约束没有吃弄坏。这是说数据库事务不能够破坏关系数据的完整性和业务逻辑上之一致性。

  - 隔离性:
多只工作并发访问时,事务间是与世隔膜的,一个政工不应影响其他工作运行效果。

  - 持久性:
在事情完成以后,该事务所对数据库所作的变更便持久的保留于数据库中,并无见面让回滚。

  in var_orginfo varchar(30)

  3.大概用例

-- MySQL默认出错自动回滚,没出错自动提交
BEGIN;
SAVEPOINT place;
INSERT INTO orders VALUES(20010, '2005-09-08 00:00:00', 10001);
ROLLBACK;-- ROLLBACK place
COMMIT

  于COMMIT提交之前,ROLLBACK语句来撤销事务中所举行的各个一样件工作,即便工作是打响之啊足以收回,它可直接撤销到工作之启幕。在COMMIT提交之后,只能用DELETE,INSERT或者UPDATE语句,ROLLBACK是深的。

  )

老三、访问控制和用户权限管理

  内容选择自MySQL教程(https://www.yiibai.com/mysql)

  BEGIN

  1、访问控制

  当客户端连接到服务器时,MySQL访问控制有星星点点独阶段:

  -
连日来验证:连接至MySQL数据库服务器的客户端需要发一个得力之用户称以及密码。此外,客户端连接的主机必须同MySQL授权表中的主机相匹配。

  -
请验证:当连接成建立后,对于客户端起的每个语句,MySQL会检查客户端是不是有所足够的权位来实施该特定语句。
MySQL能够检查数据库,表和字段级别的权杖。

  MySQL安装程序自动创建一个叫作吧mysql的数据库。
mysql数据库含五独重要的授权表(user、db、host、tables_priv和columns_priv),它们存储了不同级别达对用户权限的装。并可由此GRANT和REVOKE等语句间接操作这些发明。

表名 权限
mysql.user  包含用户帐户和全局权限列。MySQL使用user表来接受或拒绝来自主机的连接。 在user表中授予的权限对MySQL服务器上的所有数据库都有效
mysql.db  包含数据库级权限。MySQL使用数据库表来确定用户可以访问哪个数据库以及哪个主机。在db表中的数据库级授予的特权适用于数据库,所有对象属于该数据库,例如表,触发器,视图,存储过程等
mysql.table_priv  包含表级别权限,权限适用于表中所有列
mysql.columns_priv  授予的权限只适用于字段
mysql.procs_priv  包含存储函数和存储过程的权限

  create temporary table errors (error varchar(500));

  2、用户权限管理

  MySQL8上述提供了role对象开展多用户权限管理。

/* GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]
*/

-- 创建单个用户账户
-- CREATE USER username@localhost IDENTIFIED BY passwd
CREATE USER dbadmin@localhost IDENTIFIED BY 'pwd123';
-- 查看该用户权限
SHOW GRANTS FOR dbadmin@localhost;
-- 赋予该用户操作权限
GRANT ALL PRIVILEGES ON test.customer TO dbadmin@localhost;-- 可以到mysql.table_priv授权表中查看设置
-- 更新
FLUSH PRIVILEGES;
SHOW GRANTS FOR dbadmin@localhost;
SELECT * FROM mysql.user;
-- 删除权限
REVOKE ALL PRIVILEGES ON test.customer FROM dbadmin@localhost;

  dbadmin@localhost用来指定账户称与主机地址。

  GRANT子句设置用户权限,包括针对数码库级、表级、字段、查询语句等之安装。

权限 含义 全局 数据库 过程 代理
ALL [PRIVILEGES] 授予除了GRANT OPTION之外的指定访问级别的所有权限            
ALTER 允许用户使用ALTER TABLE语句 x x x      
ALTER ROUTINE 允许用户更改或删除存储程序 x x     x  
CREATE 允许用户创建数据库和表 x x x      
CREATE ROUTINE x x          
CREATE TABLESPACE 允许用户创建,更改或删除表空间和日志文件组 x          
CREATE TEMPORARY TABLES 允许用户使用CREATE TEMPORARY TABLE创建临时表 x x        
CREATE USER 允许用户使用CREATE USERDROP USERRENAME USERREVOKE ALL PRIVILEGES语句。 x          
CREATE VIEW 允许用户创建或修改视图 x x x      
DELETE 允许用户使用DELETE x x x      
DROP 允许用户删除数据库,表和视图 x x x      
EVENT 能够使用事件计划的事件 x x        
EXECUTE 允许用户执行存储过程/存储函数 x x        
FILE 允许用户读取数据库目录中的任何文件 x          
GRANT OPTION 允许用户有权授予或撤销其他帐户的权限 x x x   x x
INDEX 允许用户创建或删除索引 x x x      
INSERT 允许用户使用INSERT语句 x x x x    
LOCK TABLES 允许用户在具有SELECT权限的表上使用LOCK TABLES x x        
PROCESS 允许用户使用SHOW PROCESSLIST语句查看所有进程 x          
PROXY 启用用户代理            
REFERENCES 允许用户创建外键 x x x x    
RELOAD 允许用户使用FLUSH操作 x          
REPLICATION CLIENT 允许用户查询主服务器或从服务器的位置 x          
REPLICATION SLAVE 允许用户使用复制从站从主机读取二进制日志事件 x          
SELECT 允许用户使用SELECT语句 x x x x    
SHOW DATABASES 允许用户显示所有数据库 x          
SHOW VIEW 允许用户使用SHOW CREATE VIEW语句 x x x      
SHUTDOWN 允许用户使用mysqladmin shutdown命令 x          
SUPER 允许用户使用其他管理操作,如CHANGE MASTER TOKILLPURGE BINARY LOGSSET GLOBALmysqladmin命令 x          
TRIGGER 允许用户使用TRIGGER操作 x x x      
UPDATE 允许用户使用UPDATE语句 x x x x    
USAGE 相当于“无权限”          

  if exists ( select user from mysql.user where user=var_user) then

  insert into errors values (concat(‘用户名 “‘,var_user,'”
已存在!’));

  end if;

  if exists (select * from errors) then

  select error from errors;

  else

  set @user=concat(var_user,’@\”,var_ip,’\”);

  set @s=concat(‘create user ‘,@user,’ identified by ”12345”;’);

  prepare cmd from @s;

  execute cmd;

  set @s=concat(‘GRANT SELECT ON `mysql`.`func` TO ‘,@user,’;’);

  prepare cmd from @s;

  execute cmd;

  set @s=concat(‘GRANT SELECT ON `mysql`.`proc` TO ‘,@user,’;’);

  prepare cmd from @s;

  execute cmd;

  replace into dev_test_userinfo values
(var_user,var_username,var_email,var_orginfo);

  end if;

  drop temporary table errors;

  END

  $$

  delimiter ;

  试着创造一个普通用户user_test1

  mysql>create user user_test1 identified by ‘12345’;

  查看该权力

  mysql>show grants for user_test1;

  +———————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————–+

  | GRANT USAGE ON *.* TO ‘user_test1’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ |

  +———————————————————————————————————–+

  赋予其configdb上的select\insert\delete\update权限

  mysql>grant select,insert,delete,update on configdb.* to
‘user_test1’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’

  mysql> show grants for user_test1;

  +———————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————–+

  | GRANT USAGE ON *.* TO ‘user_test1’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ |

  | GRANT SELECT, INSERT, UPDATE, DELETE ON `configdb`.* TO
‘user_test1’@’%’ |

  +———————————————————————————————————–+

  使用这个用户登录MySQL执行才定义之贮存过程

  mysql>use configdb;

  mysql>call
sp_dev_test_user_add(‘uapp_yzz’,’172.16.%’,’yzz’,'[email protected]’,’MySQL
DBA’);

  ERROR 1370 (42000): execute command denied to user ‘user_test1’@’%’
for routine ‘configdb.sp_dev_test_user_add’

  看来是权力不足,继续予以其configdb上的execute权限

  mysql> grant execute on configdb.* to ‘user_test1’@’%’
IDENTIFIED BY PASSWORD ‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’;

  mysql> show grants for user_test1;

  +———————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————–+

  | GRANT USAGE ON *.* TO ‘user_test1’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ |

  | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `configdb`.*
TO ‘user_test1’@’%’ |

  +———————————————————————————————————–+

  重新祭这用户登录MySQL执行刚定义的存储过程

  mysql>use configdb;

  mysql>call
sp_dev_test_user_add(‘uapp_yzz’,’172.16.%’,’yzz’,'[email protected]’,’MySQL
DBA’);

  ERROR 1449 (HY000): The user specified as a definer
(‘user_admin’@’%’) does not exist

  这次足调用该存储过程了,但是提示存储过程定义着之definer不设有,原来只是连接受MySQL服务器的用户拥有执行存储过程的权力是遥远不够的,最终要透过囤过程定义着指定的definer来执行存储过程。

  创建user_admin’@’%’这个用户,并予configdb上相应的权限

  mysql>create user user_admin identified by ‘12345’;

  mysql> grant select,insert,delete,update on configdb.* to
‘user_admin’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’;

  mysql> show grants for user_admin;

  +———————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————–+

  | GRANT USAGE ON *.* TO ‘user_admin’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ |

  | GRANT SELECT, INSERT, UPDATE, DELETE ON `configdb`.* TO
‘user_admin’@’%’ |

  +———————————————————————————————————–+

  重新采用’user_test1’@’%’用户登录MySQL执行才定义的存储过程

  mysql>use configdb;

  mysql> call
sp_dev_test_user_add(‘uapp_yzz’,’172.16.%’,’yzz’,'[email protected]’,’MySQL
DBA’);

  ERROR 1370 (42000): execute command denied to user ‘user_admin’@’%’
for routine ‘configdb.sp_dev_test_user_add’

  看来不仅是连接受MySQL服务器的用户需具备存储过程及的施行权,存储过程定义者同样用该权限。

  mysql> grant execute on configdb.* to ‘user_admin’@’%’
IDENTIFIED BY PASSWORD ‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’;

  mysql> show grants for user_admin;

  +———————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————–+

  | GRANT USAGE ON *.* TO ‘user_admin’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ |

  | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `configdb`.*
TO ‘user_admin’@’%’ |

  +———————————————————————————————————–+

  重新以’user_test1’@’%’用户登录MySQL执行刚定义的存储过程

  mysql>use configdb;

  mysql> call
sp_dev_test_user_add(‘uapp_yzz’,’172.16.%’,’yzz’,'[email protected]’,’MySQL
DBA’);

  ERROR 1044 (42000): Access denied for user ‘user_admin’@’%’ to
database ‘configdb’

  可以执行存储过程了,但是提示权限不足,仔细查看存储过程的定义可以观看,存储过程遭到含有创建用户和给予权力的话语,而我辈赋给’user_test1’@’%’用户和’user_admin’@’%’都无具有如此的权位。

  赋予’user_test1’@’%’创建用户之权杖和赋权的权杖,以及开创临时表的权力

  mysql> grant create user on *.* to ‘user_test1’@’%’ IDENTIFIED
BY PASSWORD ‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ with grant
option;

  mysql> grant create temporary tables on configdb.* to
‘user_test1’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’;

  mysql> show grants for ‘user_test1’@’%’;

  +———————————————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————————————–+

  | GRANT CREATE USER ON *.* TO ‘user_test1’@’%’ IDENTIFIED BY
PASSWORD ‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ WITH GRANT OPTION
|

  | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES,
EXECUTE ON `configdb`.* TO ‘user_test1’@’%’ |

  +———————————————————————————————————————————–+

  重新利用’user_test1’@’%’用户登录MySQL执行方才定义之仓储过程

  mysql>use configdb;

  mysql> call
sp_dev_test_user_add(‘uapp_yzz’,’172.16.%’,’yzz’,'[email protected]’,’MySQL
DBA’);

  ERROR 1044 (42000): Access denied for user ‘user_admin’@’%’ to
database ‘configdb’

  对了,不管而是为什么账户登录的MySQL,最后是行使存储过程的definer执行存储过程的,所以该将创建用户和赋权的权能付给definer,这里呢user_admin’@’%’这个账户。

  赋予’user_admin’@’%’创建用户之权杖和赋权的权杖

  mysql> grant create user on *.* to ‘user_admin’@’%’ IDENTIFIED
BY PASSWORD ‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ with grant
option;

  mysql> grant create temporary tables on configdb.* to
‘user_admin’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’;

  mysql> show grants for ‘user_admin’@’%’;

  +———————————————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————————————–+

  | GRANT CREATE USER ON *.* TO ‘user_admin’@’%’ IDENTIFIED BY
PASSWORD ‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ WITH GRANT OPTION
|

  | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES,
EXECUTE ON `configdb`.* TO ‘user_admin’@’%’ |

  +———————————————————————————————————————————–+

  重新采用’user_test1’@’%’用户登录MySQL执行刚定义的积存过程

  mysql>use configdb;

  mysql> call
sp_dev_test_user_add(‘uapp_yzz’,’172.16.%’,’yzz’,'[email protected]’,’MySQL
DBA’);

  ERROR 1142 (42000): SELECT command denied to user ‘user_admin’@’%’
for table ‘user’

  哦,除了configdb库外还得生mysql库上user表的权限,给加上,看来权限问题还真是难上加难,呵呵~

  mysql> grant select,insert,delete,update on mysql.* to
‘user_admin’@’%’ IDENTIFIED BY PASSWORD
‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’;

  mysql> show grants for ‘user_admin’@’%’;

  +———————————————————————————————————————————–+

  | Grants for
[email protected]%
|

  +———————————————————————————————————————————–+

  | GRANT CREATE USER ON *.* TO ‘user_admin’@’%’ IDENTIFIED BY
PASSWORD ‘*00A51F3F48415C7D4E8908980D443C29C69B60C9’ WITH GRANT OPTION
|

  | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY
TABLES, EXECUTE ON `configdb`.* TO ‘user_admin’@’%’ |

  | GRANT SELECT, INSERT, UPDATE, DELETE ON `mysql`.* TO
‘user_admin’@’%’ |

  +———————————————————————————————————————————–+

  重新以’user_test1’@’%’用户登录MySQL执行才定义之积存过程

  mysql>use configdb;

  mysql> call
sp_dev_test_user_add(‘uapp_yzz’,’172.16.%’,’yzz’,'[email protected]’,’MySQL
DBA’);

  Query OK, 0 rows affected (0.05 sec)

  终于OK了,相信经过这无异于多元过程,大家应该能够非常懂的摸底MySQL存储过程有关的履行权了。另外,定义该存储过程还用出CREATE
ROUTINE的权杖、更该存储过程要有ALTER
ROUTINE的权力(这里是用超级用户在configdb创建的蕴藏过程,上述权限都是有着的),调用存储过程的用户需有EXECUTE权限,最终实施存储过程的用户为便存储过程定义者要拥有存储过程定义语句被相关的各种权力。

  MySQL的权能分的比密切,大致可分为表权限、列权限、过程权限具体但参考MySQL官方手册。

http://www.bkjia.com/Mysql/745966.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/745966.htmlTechArticleMySQL中以用户执行存储过程的权限为EXECUTE
比如我们以叫吧configdb的数据库下创造了之类存储过程,存储过程的定义者为user_admin
use configdb; d…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图