微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让用户执行数据库下的所有程序常规方法不起作用?

如何解决如何让用户执行数据库下的所有程序常规方法不起作用?

我有一个数据库,有几个程序,我需要做的是创建一个用户并给他一定的使用权限,包括程序的使用。

我为它做的是

CREATE USER 'user'@'user_ip' IDENTIFIED BY 'password';
GRANT CREATE,DROP,DELETE,INSERT,SELECT,UPDATE ON mydb.* TO 'user'@'user_ip';
GRANT EXECUTE ON mydb.* TO 'user'@'user_ip';
FLUSH PRIVILEGES;

然后当我用这个用户打开数据库时,我看到了表格,但我没有看到过程......

我做错了什么?

解决方法

我用 root 用户创建了下面的程序

 DELIMITER //
 
 CREATE PROCEDURE GetAllTitles() BEGIN  SELECT *  FROM titles; END //
 
 DELIMITER ;

然后像你提到的那样给予适当的许可

 CREATE USER 'my_user'@'%' IDENTIFIED BY 'Not_so_secure!1'; GRANT
 CREATE,DROP,DELETE,INSERT,SELECT,UPDATE ON employees.* TO
 'my_user'@'%'; GRANT EXECUTE ON employees.* TO 'my_user'@'%'; FLUSH
 PRIVILEGES;

然后连接到那个用户 my_user

       mysql> select user();
      +-------------------+ 
      | user()            |
      +-------------------+ 
      | my_user@localhost |
      +-------------------+ 
      1 row in set (0.00 sec)
 

然后检查我是否可以看到使用 my_user 连接到 mysql 的以下命令的过程

 mysql> SHOW PROCEDURE STATUS \G;
 *************************** 1. row ***************************
                   Db: employees
                 Name: GetAllTitles
                 Type: PROCEDURE
              Definer: root@localhost
             Modified: 2021-05-17 12:55:05
             Created: 2021-05-17 12:55:05
       Security_type: DEFINER
              Comment:  character_set_client: latin1 collation_connection: latin1_swedish_ci   Database Collation:
 latin1_swedish_ci 1 row in set (0.00 sec)

然后尝试调用它的工作

 CALL employees.GetAllTitles();

确保您正在刷新权限

,

授予对存储过程的权限

1.在对象资源管理器中,连接到数据库引擎的实例,然后展开该实例。

2.Expand Databases,展开程序所属的数据库,然后展开Programmability。

3.展开存储过程,右键单击要授予权限的过程,然后单击属性。

4.从存储过程属性中,选择权限页面。

5.要向用户、数据库角色或应用程序角色授予权限,请单击“搜索”。

6.在选择用户或角色中,单击对象类型以添加​​或清除所需的用户和角色。

7.单击浏览以显示用户或角色列表。选择应授予权限的用户或角色。

8.在“显式权限”网格中,选择要授予指定用户或角色的权限。有关权限的说明,请参阅权限(数据库引擎)。

请关注Microsoft Documents以获得更好的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。