您如何处理 Oracle 中缺少 Schema 级别的权限?Oracle 的安全架构适用于只需要对象级权限的应用程序,也适用于需要很少限制的 DBA。然而,对于在多模式中使用前端应用程序和 PL/SQL 进行开发的程序员来说,架构中似乎存在一个很大的漏洞。以下是我的一些选择及其缺点:
让每个程序员按照自己的模式进行开发。DBA 将向需要它们的程序员授予对象级权限。任何包开发都必须由 DBA 完成。主要的缺点是程序员会像比特桶一样使用数据库,这会损害数据库性能。我希望程序员在数据库中开发,但这种方法会大大阻止它。
为每个程序员提供他们需要在其中进行开发的十几个模式的用户名/密码。授予这些应用程序模式权限以创建过程、表等。这种方法的一些缺点是程序员必须维护多个登录,并且很少以自己的身份登录。跨模式开发也很困难。
授予程序员对他们需要进行开发的每个模式的代理身份验证权限。这使他们能够以自己的身份登录,而无需授予他们代理特权以外的特权。缺点包括程序员必须为他们代理的每个模式维护单独的连接,跨模式开发更加麻烦,因为连接必须不断变化,并且使用公共数据库链接并通过身份验证的包不会在代理连接内编译。
赋予每个程序员 DBA 权限。– 这里的缺点是安全性。任何模式程序员都不能被排除在任何模式之外,任何程序员都可以冒充任何其他程序员 (DBA)。
似乎缺少授予每个程序员 SELECT/INSERT/CREATE/etc 的选项。他们需要在其中进行开发的架构上的特权。他们以自己的身份登录以使用一个连接完成他们的工作。他们有权访问的模式中的新对象立即可用。
我错过了什么吗?您如何处理进行 PL/SQL 开发的应用程序程序员?
我在尝试让我的存储过程使用时遗漏了一些东西EXECUTE AS。存储过程正在从中读取数据source_db、聚合数据并将结果存储在 中target_db。
sp 本身在target_db. 我有一个专用的登录名并将它映射到用户source_db和target_dbsp 的所有者(所以有一个用户app_agent在source_db和target_db登录app_agent)。
如果我以 身份登录app_agent并执行
EXEC target_db.app_agent_schema.import_data
Run Code Online (Sandbox Code Playgroud)
一切正常。但如果我改变
ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`)
Run Code Online (Sandbox Code Playgroud)
并尝试执行它,它抛出
服务器主体“app_agent”无法在当前安全上下文下访问数据库“source_db”。
我正在使用 SQL Server 2008。
有人能指出我的错误吗?
谢谢
更新
经过一些研究,我发现ALTER DATABASE target_db SET TRUSTWORTHY ON解决了问题,但这对我来说似乎不是正确的解决方案......
有人告诉我,如果攻击者可以访问未加密的 .bak 文件,他们就可以访问数据。
所以让我们看看这个场景:
OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate
Run Code Online (Sandbox Code Playgroud)
注意 - 这里没有密码。
然后我们通过以下方式加密我们的表:
UPDATE tbl1
SET namePAss = ENCRYPTBYKEY(KEY_GUID('MySymetricKey'),name)
GO
Run Code Online (Sandbox Code Playgroud)
现在假设黑客得到了我的bak文件。为了查看数据(在他自己的计算机和 sql-server 中),他所要做的就是:
SELECT
convert( NVARCHAR(max), decryptbykey(namePAss))
FROM tbl1
Run Code Online (Sandbox Code Playgroud)
他还能访问数据吗?
根据文档:
PL/Python 仅可用作“不受信任”的语言,这意味着它不提供任何方式来限制用户可以在其中执行的操作,因此被命名为 plpythonu。如果在 Python 中开发了安全执行机制,那么将来可能会出现可信变体 plpython。
为什么为 Python 开发安全执行机制却很难,而为其他语言(如 Perl)开发安全执行机制却没有?
哪个数据库角色成员资格授予在 SQL Server 2012 中执行所有现有存储过程的权限?
我尝试为每个用户添加一个用户,但仍然无法执行存储过程。我不想EXECUTE单独授予每个存储过程,我想将用户添加到角色并且他能够执行其中的任何一个。
我正在实施一项新功能,该功能需要来自多台服务器上的数据库的数据。我只需要合并来自所有这些服务器的数据并对其进行排序。想到的两个选项是:
使用链接服务器并编写一个简单的查询来合并和排序将从一台服务器运行并从其他服务器收集数据的数据。
使用应用程序从所有服务器收集数据,并将其发送回 SQL Server 进行排序(不想在应用程序中实现排序)。
我们在 SQL Server 2008 r2 的主动/主动集群中运行我们的服务器。所有数据库都具有相同的权限,如果您有权访问一个数据库/服务器,则您对它们都有权限。这是一个面向公众的应用程序(需要用户登录)。
使用链接服务器有哪些风险?是否有任何我应该关注的安全漏洞?在主动/主动集群中运行链接服务器是否有任何问题?与替代方案相比,是否存在任何重大的性能问题?
关于链接服务器似乎有普遍的负面“嗡嗡声”,但我找不到任何具体的东西让我相信那里有任何真正的担忧。
performance sql-server-2008 security sql-server linked-server
我很好奇如何设置要作为不同 SQL 登录帐户执行的 SQL 作业步骤。看来我需要设置一个需要现有凭据的新代理帐户。创建凭据时,我唯一的选择是使用 Windows 登录凭据。
我正在尝试运行的工作如下。还有其他附加语句,但是当我将作业步骤设置为在 SQL 登录时运行时,它会失败。
insert into [dbo].[TableA]
SELECT
ss.[Ref_ID]
,mm.[studentID]
,mm.[studentPersonID]
,mm.[studentFirstname]
FROM [dbo].[TableB] mm
left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID
where ss.Ref_ID is not null;
Run Code Online (Sandbox Code Playgroud)
当它通过 SQL 作业步骤运行时,它会失败。
Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE 42000] (Error 15274). The step failed.
Run Code Online (Sandbox Code Playgroud)
当所有这些表都存在于本地数据库中时,我不清楚为什么它会尝试访问远程服务器。
在 SQL Server 中是否可以在不登录 SQL Server 的情况下确定是否启用了混合模式身份验证?
我根据 database2 中的表在 database1 中创建了视图。我SELECT授予了一个只能访问 database1 的用户的权限。用户无法使用此视图,因为他在 database2 中没有帐户。我该如何解决这个问题?我不想在 database2 中创建帐户。
我在VIEW DEFINITION为我的一个用户在架构级别适当设置权限时遇到问题。我已经创建了架构TestSchema并添加了一些表。用户目前有权限设置为访问和修改表(SELECT,UPDATE,DELETE通过等)dbo_datareader和dbo_datawriter角色。但是,他们看不到 SSMS 对象资源管理器中的任何表。
我试过授予查看定义的权限:
grant view definition on SCHEMA :: [TestSchema] to [User]
Run Code Online (Sandbox Code Playgroud)
那没有用。我尝试设置表级权限:
grant view definition on [TestSchema].[NewTable] to [User]
Run Code Online (Sandbox Code Playgroud)
那也没有用。然后我尝试了一个全面的资助:
grant view definition to [User]
Run Code Online (Sandbox Code Playgroud)
那确实奏效了;他们现在可以看到TestSchema,以及他们不应该访问的其他模式。
我的目标是允许用户查看给定模式中的所有表。我如何做到这一点?如果默认情况下我应该能够执行此操作,我应该查看哪些权限才能找到为什么不能执行此操作?
security ×10
sql-server ×7
permissions ×3
logins ×1
oracle ×1
performance ×1
plpython ×1
postgresql ×1
python ×1
ssms ×1
view ×1