如何让用户执行数据库下的所有程序(常规方法不起作用)?
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();
确保您正在刷新权限
我有一个数据库,有几个程序,我需要做的是创建一个用户并给他一定的使用权限,包括程序的使用。
我为它做的是
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();
确保您正在刷新权限