我有一个名为user1. user1可以执行存储过程[Test].[SP1]
EXEC [Test].[TestSortation]
EXEC [TestSortation]
Run Code Online (Sandbox Code Playgroud)
以上两个命令都有效。
现在,如果我给user1的服务器角色sysadmin除了public。上面 2 个语句中的后者失败,并引发此错误:
找不到存储过程“TestSortation”。
我不想手动更改数据库中的每个存储过程以将模式名称包含在 EXECute 命令中。有人可以向我解释为什么会发生这种情况。另外,有没有办法解决这个问题,自动修复我的存储过程,将架构默认为[Test]?
sql-server stored-procedures permissions role sql-server-2008-r2
首先是简短版本:
是否可以SET ROLE通过特定角色自动调用新的 PostgreSQL 数据库连接,无论是通过连接角色上的配置(使用ALTER ROLE),还是通过连接 URI 末尾的选项?
更长,结合上下文:
我正在设置一个 Web 应用程序以使用轮换数据库凭据(因此,有多种角色在发挥作用)。但是,这些凭据还用于对数据库进行修改(通过 Rails 迁移),这意味着表将由不打算长期存在的角色拥有。
我可以修改轮换凭据,以便它们继承父角色(本身无法登录),然后通过SET ROLE所有数据库修改都归父角色所有,而不是短期子角色。这解决了所有权问题,但它需要调用每个连接SET ROLE parent- 不太可行。
因此,我需要某种方法来确保每个子连接始终在父角色的上下文中运行。这可能吗?
我在 Oracle 10g 中遇到权限问题。我希望有人可以帮助我理解这一点。
我有一个带有表格的架构。我已将该表上的 select 授予一个角色。
grant select on user1.example_table to example_role;
Run Code Online (Sandbox Code Playgroud)
然后我将该角色授予用户:
grant example_role to user2;
Run Code Online (Sandbox Code Playgroud)
然后 user2 想在该表的顶部创建一个视图:
create or replace view user2.example_view as
select *
from user1.example_table;
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误:
ORA-01031: insufficient privileges
Run Code Online (Sandbox Code Playgroud)
为什么?如果他们通过角色拥有选择权限,为什么他们不能在该对象上创建视图?
我发现我必须将对象直接授予用户才能工作。
grant select on user1.example_table to user2;
Run Code Online (Sandbox Code Playgroud)
无论如何不必这样做吗?我想使用角色,因为我有很多表和很多用户,并且不想为单个用户维护一百万个不同的授权。
嗨,我正在尝试创建一个登录角色(用户),其修改数据库的能力相当小。他们应该能够选择、删除、创建触发器、插入和更新。然后,我希望拥有多个作为用户成员的帐户,因此它们具有相同的权限,但我可以为单个用户记录编辑。
我在数据库设计中使用 pgadmin,我的程序使用 QtSQL 访问它。
尝试选择一些数据作为测试时,Qt 捕获了我收到的错误消息。当我运行与数据库所有者和超级用户相同的代码时,我没有问题。
bool run_query(const QString & q){
QSqlDatabase db = QSqlDatabase::database("default");
QSqlQuery query(db);
query.exec(q);
if (!query.isActive()){
QMessageBox::warning(0, QObject::tr("Database Error"),
query.lastError().text());
return false;
}
while (query.next()){
QString title = query.value(0).toString();
std::cerr << qPrintable(title) << std::endl;
}
return true;
}
run_query("Select forename from contacts;");
Run Code Online (Sandbox Code Playgroud)
错误:关系联系人的权限被拒绝 QPSQL:无法创建查询
到目前为止,我已经创建了角色(用户)。
-- Role: user
-- DROP ROLE "user";
CREATE ROLE "user" LOGIN
ENCRYPTED PASSWORD 'md54d45974e13472b5a0be3533de4666414'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
COMMENT ON ROLE "user" IS 'Low level user';
Run Code Online (Sandbox Code Playgroud)
因为这给了以前的问题。我尝试为数据库添加公共权限,但这也不起作用。
现在我不知道去哪里寻找解决方案。任何帮助深表感谢。谢谢。
我有一台装有 Microsoft SQL Server 2008 和 VERITAS NetBackup 的 Windows Server 2008。基本上,此 NetBackup 需要一个有效的登录 ID,该 ID 登录到 SQL Server 的功能足够强大以进行备份和还原。
我在 OS 上创建了一个名为 backup01 的本地 ID,并将其分配给 Backup Operator 组。接下来,我在 SQL Server 2008 中使用 Windows 身份验证为 backup01 创建了一个登录名。至于服务器角色,我将其分配为“public”和“sysadmin”。这样,通过 NetBackup 进行的备份和还原将始终有效。
但是,我们的安全策略不鼓励将 sysadmin 或管理员等效权限分配给非管理员用户。
在这种情况下,我在哪里可以找到 Microsoft SQL Server 中的此备份操作员角色?或者是否有任何指南或教程可以指导您创建新角色?谢谢!
我的理解是,我可以将该EXECUTE AS OWNER子句用作我创建的过程的一部分,以使该过程的主体以不同的用户身份运行。我的目标是执行需要sysadmin角色 ( DBCC TRACEON(1224))的命令。此过程应该由非特权用户调用。
我在sa用户下运行了以下脚本:
SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin')
-- dbo 1 1
IF EXISTS(SELECT * FROM sys.procedures WHERE name = 'MyProc')
DROP PROCEDURE MyProc
GO
CREATE PROCEDURE MyProc
WITH EXECUTE AS OWNER
AS
SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin');
-- dbo 1 0
DBCC TRACEON(1224)
--Msg 2571, Level 14, State 3, Procedure MyProc, Line 7
--User 'dbo' does not have permission to run DBCC TRACEON.
RETURN
GO
EXEC …Run Code Online (Sandbox Code Playgroud) 我只是花了几个小时试图弄清楚应用程序如何有权限执行存储过程。
来自 StackExchange 的TIL:事实证明该ON子句对于 是可选的GRANT,允许授予角色对所有内容执行。在我尽力验证语法之后,我不得不嘲笑这个 MSDN 页面的最底部。
CREATE ROLE Test
GRANT EXECUTE TO Test
Run Code Online (Sandbox Code Playgroud)
好的,这很酷(不是最小特权原则)。
但是:我如何发现或检测该授权?
我尝试查看所有 SQL Server Management Studio 登录名、角色、用户和架构权限 GUI,但在任何地方都没有发现这种类型的授权。
在调试时,我发现了有关在查询中枚举权限的问题,虽然这些问题是相关的,但这里的答案既没有提到也没有涵盖这种情况:
我正在寻找识别这种授予(或拒绝)特权方法的最可靠方法。
In SQL Server, I would like to create a role that has the ability to manipulate database objects as well as create other roles and grant those roles subsets of its permissions.
CREATE ROLE deploymentRole;
CREATE ROLE subRole;
GRANT SELECT TO deploymentRole WITH GRANT OPTION;
CREATE TABLE dbo.testTable (id INT NULL);
CREATE USER deployUser WITHOUT LOGIN;
ALTER ROLE deploymentRole ADD MEMBER deployUser;
EXECUTE AS USER = 'deployUser';
--This works
SELECT * FROM dbo.testTable
--This also works
GRANT SELECT TO subRole …Run Code Online (Sandbox Code Playgroud) 我有一个 AD 组,它在我的 SQL Server 上设置为 Windows Authenticated SQL 登录名。在DatabaseA它具有db_datareader和public角色。所以这个 AD 组的用户对数据库中的实体只有读访问权限。
在DatabaseA我内部有一个存储过程dbo.Proc1,我授予execute了同一个 AD 组的权限。
当该 AD 组的用户连接到此服务器时,他们看不到实体dbo.Proc1。
我是否需要向缺少的 Windows 身份验证 SQL 登录(AD 组)提供任何其他权限?
我确实看到,如果我查看 的属性DatabaseA,就会发现execute该级别的权限尚未授予。
(注意:我只希望该 AD 组的用户能够执行dbo.Proc1。我不希望他们能够执行任何不被视为“只读”类型的操作。)
我希望能够获得一个函数名称和函数所有者名称的表格。
目前,此查询返回给定模式的函数列表:
SELECT proname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p
ON pronamespace = n.oid
WHERE nspname = '<%= schema_name %>';
Run Code Online (Sandbox Code Playgroud)
我可以看到有一proowner列返回角色的 ID。
https://www.postgresql.org/docs/10/catalog-pg-proc.html
我想要的是返回所有者名称的东西,我只是不知道足够的 SQL 来弄清楚如何加入表等。
|function_name|function_owner|
______________________________
|func1 |func1_owner |
|func2 |func2_owner |
Run Code Online (Sandbox Code Playgroud)
如果有人可以解释如何做到这一点,我将不胜感激!
谢谢
role ×10
sql-server ×6
permissions ×5
postgresql ×3
security ×2
backup ×1
dbcc ×1
deployment ×1
functions ×1
oracle ×1
view ×1