- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要向用户授予执行特定过程的 EXECUTE PROCEDURE 权限,但仅限一段时间。过了该时间段,我想删除用户的所有执行权限 - 但保留已授予的其他权限,例如 SELECT 或 INSERT,完好无损。
如何删除所有执行权限?这似乎不起作用:
将过程 add_data 上的执行授予 user1;
--时间流逝,现在:
将过程 list_data 上的执行权限授予 user1;
--时间过去了,现在是撤销的时候了:
从 user1 撤销 *.* 上的执行;
结果是用户仍然可以执行 add_data 和 list_data。 REVOKE EXECUTE on *.* 仅在用户被授予 EXECUTE ON *.* 时才显示为撤销某些内容,即使如此,它也会删除 *.* 权限,但保留更具体的授权。
我错过了什么吗?我是否必须在表格中跟踪我授予用户的所有权限并一一撤销它们(看起来很疯狂)?
我在 AWS Aurora Serverless 上使用 MySQL 5.6.10。
最佳答案
在不知道您曾经授予用户的所有授权的情况下,SQL 中无法“撤销用户的所有 EXECUTE 授权”。相反,您需要直接修改三个 mysql 表(eek)。像这样:
SET @user = 'myuser';
SET @host = '%';
-- remove all proc-level execute permissions
DELETE FROM mysql.procs_priv WHERE user=@user AND Host=@host AND Proc_priv = 'Execute';
-- remove all db-level execute permissions
UPDATE mysql.db SET Execute_priv = 'N' WHERE user=@user AND Host=@host;
-- remove user-level permission
UPDATE mysql.user SET execute_priv = 'N' WHERE user=@user AND Host=@host;
-- force engine to reload its cached permissions so they take effect now
FLUSH PRIVILEGES
在 MySQL 中,如果您不知道每个用户有三个同时执行权限状态,您很容易意外地向某人授予您不打算授予的权限。
GRANT/REVOKE EXECUTE ON *.*
、GRANT/REVOKE EXECUTE ON mydb.*
和 GRANT/REVOKE EXECUTE ON PROCEDURE nnn
创建三个独立的静态状态,当您进行权限更改时,这些状态不同步。
MySQL使用三个权限表来确定EXECUTE权限:user表、db表和procs_priv表。
(1) 将 *.* 上的执行权限授予 user1;
此语句在 user 表中设置一个标志 (execute_priv)。如果用户打开此标志,他们就可以执行任何数据库中的任何过程或函数。
(2) 将 mydb.* 上的执行授予 user1;
此语句在 db 表中为该用户/数据库组合设置一个标志 (Execute_priv)。如果用户为数据库启用了此标志,则他们可以执行该数据库中的任何过程或函数。
(3) 将 PROCEDURE proc 上的执行授予 user1;
此语句在 procs_priv 表中创建一个条目,授权用户执行该特定过程。
在调用函数/存储过程之前,引擎会查看您是否具有用户级权限。如果是这样,它不会再进一步查找并继续进行调用。然后它会查看您是否具有数据库级别的权限。最后,它会查看您是否具有特定于过程的权限。
如果您像我一样误解并认为您的授予和撤销语句是在当前权限状态中添加/减去,则可能会导致一个大错误。
示例 1:REVOKE EXECUTE ON *.* FROM user1
不会撤销 user1 的所有 EXECUTE 权限。它从 user1 中删除用户级全局 EXECUTE 权限,并保留所有其他 EXECUTE 权限(数据库级和过程级)。
示例 2:REVOKE EXECUTE ON PROCEDURE proc1 FROM user1
并不会删除 user1 执行 proc1 的能力。如果只是删除特定的程序级权限。如果用户之前被授予 mydb.* 或 *.* 执行权限,则这些权限在您 REVOKE 后仍然存在。
关于mysql - 如何撤销 MySQL 中用户的所有 EXECUTE 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469466/
我目前正在使用 Oracle Database Express Edition 11g 处理一些 GRANT 选项。考虑以下小代码示例,其中一些用户向其他用户授予一些权限: -- User A GRA
我不明白这两个查询之间的区别, 1.修改用户用户名账户锁定;2.REVOKE CREATE SESSION FROM 用户名; 这些查询将如何影响用户? 如果我使用撤销 session ,那么可以进行
我正在尝试撤销以下 Google token API ("Content-type:application/x-www-form-urlencoded",请求类型 POST,https://accou
我不明白这两个查询之间的区别, 1.改变用户用户名账户锁;2.REVOKE CREATE SESSION FROM用户名; 这些查询将如何影响用户? 如果我使用 revoke session 那么可以
在服务器上使用 python 访问 firestore 管理员: import firebase_admin from firebase_admin import credentials, fires
MariaDB 中是否可以撤销用户的权限并同时撤销他授予的用户的权限?到目前为止我已经尝试过类似的事情 REVOKE SELECT ON mysql.sometable FROM 'user'@'%'
如果我使用普通用户帐户创建表: create table test (a text, b text, c text); 同一用户可以对表执行所有操作... john=# \z test
在 PostgreSQL 中,当 super 用户授予任何权限时(例如 GRANT SELECT ON TABLE table_name),只有 super 用户可以撤销它们。 有没有其他 super
我试过使用文档 here但似乎没有帮助。如果可以请给我一个例子。 revoke select (column1, column2) on table from specific_user 没用。 Ac
有没有一种方法可以撤销用户对目录对象(即 information_schema)和 PostgreSQL 表(即 pg_catalog)的权限?我已经尝试了几件事并搜索了网络。我没有任何运气。我读到的
在我的应用程序中,我使用的是 APNS。我已经制作了证书,但我对使用感到困惑。我收到以下错误。 Warning: stream_socket_client(): SSL operation faile
[我检查过类似的帖子,我的问题与其他人的问题略有不同,因为我们有多个应用程序在一个证书下签名] 我们受委托(delegate)为客户开发现有的 iOS 应用程序,现在需要使用他们的证书将其分发到应用程
我的 APNs 证书即将到期,所以我撤销了 APNs 证书(只是为了确保一切正常)。但是 30 分钟后我仍然收到测试推送通知。是因为苹果的缓存吗?会持续多久? 最佳答案 根据您的问题,您的旧证书尚未过
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关于您编写的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以重现它。参见 SSC
是否可以在 C# 中执行类似的操作? logger != null ? logger.Log(消息) : ;//如果为 null 则什么都不做 或 记录器!?? logger.Log(消息);//只有
我不小心执行了以下命令: git rm -r . 毫不奇怪,它删除了所有内容。有什么办法可以恢复吗? 最佳答案 尝试: git reset HEAD 如果您没有任何您关心的未提交的更改,那么 git
我们有一个已授予某些权限的应用程序。然后用户从设置 -> 应用程序 -> 权限撤销权限。我提到该应用此时处于后台。 有时,应用会在上述流程发生时崩溃。有什么办法可以解决这个问题吗?我们可以知道何时从应
如何使用 AnkhSvn/VS 2010 撤消/恢复我已提交的更改。 (我很清楚您不能“删除”subversion 存储库中的内容)。 问题很简单, 您正在处理 HEAD(例如 rev 100)。你发
我想知道是否可以撤销 ThinkTecture Identity Server 颁发的 OAuth 2.0 token ,因为我想让我的应用程序注销。 最佳答案 这仅适用于实现 RFC 7009 的
我有一个 grails 应用程序,我希望用户授予我访问他/她的 LinkedIn 帐户的权限,以获取信息并以不同的方式显示它。 我能够做到以下几点: 获取授权码 使用该授权码获取访问 token 我将
我是一名优秀的程序员,十分优秀!