我一直在阅读 Microsoft SQL 服务器中的应用程序角色。应用程序角色似乎与任何其他角色一样,可以将安全对象的权限授予应用程序角色,但是,不同之处在于它必须由使用存储过程的应用程序“调用” sp_setapprole。
我可以看到使用它的唯一原因是 DBA 允许应用程序(及其开发人员)连接到数据库,而不必提供服务器登录名或数据库用户,因此开发人员无法直接连接到 SQL Server(例如通过 SSMS),即使那样,我也看不到这样做的好处,因为提供给应用程序/开发人员的帐户肯定会被授予最低要求的权限吗?
我在这里错过了什么吗?
我必须收集一些PostgreSQL角色的信息。一条信息是角色是否具有与“通常”不同的设置,这里通常意味着只有少数参数的默认值(例如log_statement)。
到目前为止,我只有一个想法:遍历所有用户并发出命令
\c postgres username
SHOW log_statement;
Run Code Online (Sandbox Code Playgroud)
然后处理输出。
我想知道是否有类似查询pg_settings视图、显示每个用户设置的类似方法?我不需要知道特定于会话的差异,只需要知道那些持久化的差异。
在这篇文章中,我似乎和 Yasser 有同样的问题
我无法添加新的服务器角色“SQL Server 2008 R2”
但我正在运行 SQL Server 2014。
基本上,当我右键单击服务器角色时,我只会得到一个包含三个选项的菜单,“启动 Power Shell、报告、刷新”。
命令 CREATE SERVER ROLE 有效。我以“sa”身份登录。任何建议都会非常有帮助。
谢谢你。
情况:作为角色/组成员的 PG 用户(非超级用户,继承自父角色)无法从特定表中读取数据,即使已指定这些对象权限:
我无法弄清楚该tablename_tablename_id_seq对象的作用——我的所有数据库表和序列之间存在 1:1 关系,但不确定这如何影响许可。
我尝试将“用法”的复选框单击为True(在 Navicat 中),但用户仍然无法从指定的表中读取。
我尝试在 PG Admin 3&4、Navicat 和 Postico 中编辑这些权限...知道我在哪里陷入困境吗?
我安装了 postgresql 10,我想对其他用户隐藏用户/角色的名称。我搜索了其他帖子,有人建议:
REVOKE SELECT ON pg_catalog.pg_authid FROM public;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM public;
Run Code Online (Sandbox Code Playgroud)
完成所有这些操作后,user1 无法深入了解用户的信息,(Error retrieving roles from the database server. ERROR: permission denied for relation pg_auth_members)但仍可以将它们全部列出,如下图所示

当然 user1 不是超级用户。
我已经测试过这个没有效果:
REVOKE SELECT ON pg_catalog.pg_roles FROM user1;
REVOKE SELECT ON pg_catalog.pg_user FROM user1;
Run Code Online (Sandbox Code Playgroud)
对此也进行了测试,但没有效果:
REVOKE SELECT ON pg_catalog.pg_authid FROM user1;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM user1;
Run Code Online (Sandbox Code Playgroud)
如果我启动下一个语句,用户将无法登录并且一切都已损坏:
REVOKE SELECT ON pg_catalog.pg_roles FROM public;
REVOKE SELECT ON pg_catalog.pg_user FROM public;
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标?对我来说向其他用户隐藏用户的名称非常重要。
背景:我正在创建一个黑客 ctf(捕获标志)虚拟机。这是挑战之一......重点是避免用户可以看到“正确的数据库用户名”进行连接。这是他/她必须在数据库中查找提示和其他加密内容的内容。
编辑:“悲伤”的解决方法是创建数百个虚拟用户以“尝试隐藏”真实用户......但它必须是一个优雅的解决方案。有什么帮助吗?
在跑步的时候
select * from sys.server_principals
Run Code Online (Sandbox Code Playgroud)
对于public角色,在列is_fixed_role中显示 0
虽然说public和其他角色有点不同,因为我们可以给它分配权限。无论如何,它被称为固定角色。
谁能解释这个困境?
我想要一个可以在所有数据库上读取、写入和查看定义的 SQL Server 登录名。
做完之后:
USE master;
GRANT VIEW ANY Definition TO [a];
Run Code Online (Sandbox Code Playgroud)
看起来我必须授予连接并读取/写入每个数据库。
没有更简单的方法吗?
我有一个表t和一些可以访问的函数t。例如:
create function list_t() returns setof t as $$
select * from t;
$$ language sql stable;
Run Code Online (Sandbox Code Playgroud)
是否可以将角色权限定义为仅允许执行list_t(),而不允许普通SELECT、UPDATE和查询DELETE?INSERTt
我尝试了以下方法:
grant execute on all functions in schema public to my_user;
revoke all on t from my_user;
Run Code Online (Sandbox Code Playgroud)
虽然这确实不允许SELECT * FROM t,但也不允许SELECT list_t()。
我需要创建只能读取(选择)数据的角色用户。我可以针对特定模式执行此操作。但我需要它与所有现有和未来的模式(至少现有)一起工作。我该怎么做?
我试过了
GRANT select ON DATABASE my_db TO my_role;
Run Code Online (Sandbox Code Playgroud)
但它说我不能:
0LP01 无效_授权_操作
ps:我需要向数据库中的所有模式授予选择权限,我只是尝试使用查询中的数据库作为选项来执行此操作,但是如果您知道如何为空数据库的选择授予角色权限,我'我也会很高兴看到这一点
如果我在这里没有正确使用一些术语,请提前道歉。我不是 DBA,但我是暂时被迫担任这个角色的。
我继承了一个在 SQL Server 2016 Enterprise 上运行的应用程序 - 一个实例用于 PROD,另一个实例用于 TEST。这些实例以“始终开启”的配置进行设置,因此我有一个用于 PROD 的可用性组和一个用于 TEST 的可用性组。每个可用性组中有两台服务器。每个实例都有多个数据库,但每个实例中只有一个数据库实际由应用程序使用 - 其他数据库看起来是为了测试目的而创建的。我只是提到还有其他数据库,以防万一它可能以某种我不知道的方式相关。
我有一个服务帐户的登录名(Windows 身份验证),并且该登录名映射到一些数据库中的同名用户。此服务帐户是 sysadmin 角色的成员。经过 IT 安全审核后,我被告知要删除此帐户的 SA 权限。我认为这不会给应用程序带来任何问题,但当然我想首先删除 TEST 实例中的权限,以便我可以确认应用程序由于某种原因不需要它们。
在测试实例中,我取消了登录的 sysadmin 角色,现在只选中了“公共”框,但我发现我仍然可以作为服务帐户登录并访问它之前有权访问的所有内容。它仍然可以访问主数据库中的所有表(这是我所期望的,因为该帐户已被授予对数据库中 dbo 架构的很多权限),但令我困惑的是它仍然可以查看服务器级别,我认为它会失去。
如果我在以服务帐户身份登录时运行此语句 ( SELECT * FROM fn_my_permissions(NULL, 'server');),则这是我获得的权限列表:
这些对我来说似乎是 SA 级别的权限,但我不明白它们来自哪里,因为 …
role ×10
permissions ×6
sql-server ×5
postgresql ×4
users ×3
acl ×1
sa ×1
security ×1
select ×1