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

how to give the user to execute all procedures under the db (regular methods doesn't works)?

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

我为它做的是

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;

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

我做错了什么?

授予对存储过程的权限

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

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

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

4.From 存储过程属性,select 权限页面。

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

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

7.Click 浏览以显示用户或角色列表。 Select 应授予权限的用户或角色。

8.In Explicit Permissions 网格,select 授予指定用户或角色的权限。有关权限的说明,请参阅权限(数据库引擎)。

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

我使用 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();

确保您正在刷新权限