问题描述
我有一个数据库,有几个程序,我需要做的是创建一个用户并给他一定的使用权限,包括程序的使用。
我为它做的是
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以获得更好的解决方案。