什么是 sql server 安全的最佳实践?使用被授予架构对象权限的 AD 组,还是应该将 AD 组添加到被授予架构对象权限的数据库角色?如果后者是最佳实践,那么使用数据库角色的真正好处是什么?
我创建了一个除域用户之外没有额外权限的 Windows 帐户,并使用 SQL Server 配置管理器将其设置为 SQL Server 代理服务帐户。
BoL/MSDN 表示该用户应该是 sysadmin 角色的一部分才能工作,但目前我还没有采取任何操作来实现这一点。
我预计该帐户无能为力,但看起来它是......系统管理员!如果您将以下语句放入作业步骤中,它将确认这一点:
IF IS_SRVROLEMEMBER ('sysadmin') = 1 print 'sysadmin'
Run Code Online (Sandbox Code Playgroud)
该作业步骤是一个 t-sql 步骤,所有者为 sa,因此使用 SQL Server 代理服务帐户。
现在回答这个问题。SQL Server 配置管理器似乎做了一些事情,使其成为系统管理员,或者至少在执行该步骤时如此。但同时它不会显示在 GUI 中的系统管理员列表中。
我提出的所有报告或查询(包括 SSMS)均未将此 Windows 帐户列为 sysadmin 角色的一部分。
我有一种感觉,我正在忽略某些东西。
我将开始道歉,因为这是我的第一篇文章,并查看其他与我自己的情况不太匹配的问题,而且我是一名系统管理员,而不是 DBA,所以我对 SQL 的理解是生疏和有限的。
我的组织经常遇到供应商,他们为了运行他们的应用程序,他们执行我们所说的惰性编程并请求 SA 凭据或要求他们的自定义帐户具有系统管理员权限。我的组织也有数据保护/合规政策,要求我们仅授予所需的访问权限和权利。
最近,我与之合作的一个供应商希望他们的帐户是系统管理员,但它实际上只需要访问一个数据库。如果我们给 AD 帐户(因为他们的应用程序仅适用于 Windows 身份验证)系统管理员权限,我可以使用应用程序的 GUI 来浏览和选择数据库,但如果我们只将同一帐户设置为 DBOwner,我们将找不到任何东西。
有没有办法确定它是否正在尝试轮询其他数据库或确定所需数据库所需的最低权限级别是什么?当我尝试询问供应商时,我被告知:“它需要系统管理员权限,但没关系,因为它只访问一个数据库。” 当涉及到我们的政策时,这是不行的。
感谢您的任何建议。
我想创建被授予访问权限的登录名
查看所有定义
选择所有表的所有记录
对我来说,将登录名分配给每个数据库并将其添加到自定义 db 角色或每个 db 中的默认 db 角色(如 db_datareader)似乎开销太大。
相反,我尝试使用用户定义的服务器角色。
但是如何将所需的权限分配给用户定义的服务器角色以允许查看所有数据库的任何定义和 db_datareader?
这甚至可能吗?
我想在数据库的 schema1 上向用户 A 授予 Create 、 alter 和 drop 权限。我想这个问题已经被问到了,我发现的是将更改授予架构并将创建表授予用户 A:
GRANT ALTER, DELETE, EXECUTE, INSERT, SELECT, UPDATE ON SCHEMA::schema1 TO user A;
GRANT CREATE TABLE TO User A;
如果这是正确的,那么 userA 是否也可以在其他模式上创建表?
我需要运行sp_BlitzGlenn Berry 的 Dr DMV 并为 SQL 2016 设置一堆 DMV 查询sp_Blitz。BrentOzar.com 上的文档指出“系统管理员权限。sp_Blitz® 检查大量系统级诊断数据。”
sysadmin 真的是所需的最低权限级别还是有人能够以更严格的权限级别运行它?
不确定我是否会在客户端的生产服务器上请求 sysadmin 权限。
我有一个用户ls_readonly应该拥有db_datareader多个数据库的权限。我以为我已经设置好了:
但是当我连接到服务器ls_readonly并尝试在对象资源管理器中打开数据库时,我收到一个错误:
数据库 wtest 不可访问。(对象浏览器)
我打开一个查询窗口master并尝试运行:
use wtest
Run Code Online (Sandbox Code Playgroud)
这回应:
Msg 916, Level 14, State 1, Line 1
The server principal "ls_readonly" is not able to access the database "wtest" under the current security context.
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
更新:这是一个线索。如果我ls_readonly作为用户从数据库的安全上下文中删除,那么我会转到服务器安全上下文下的用户,并在“用户映射”下授予对数据库的访问权限,然后它开始工作。
可能是该数据库最初是从另一台服务器恢复的,该服务器也有一个ls_readonly用户。我猜那么用户识别不是基于用户名?
我有一个新的 SQL Server 2019 本地实例。假设客户端是 SQL Server Management Studio 或任何其他应用程序:
Active Directory 身份验证被认为更安全,因为 SQL Server 身份验证允许在通过网络传递时以纯文本形式查看登录信息。
我们有多个 SQL Server,每个 SQL Server 拥有数十个数据库 - 每个客户端一个(在这种情况下,客户端意味着一个客户组织)。这些数据库是通过应用程序访问的,但该应用程序当前使用单个 Windows 登录。因此,这会产生安全风险,即如果存在某些应用程序漏洞,理论上可以访问“其他”客户端的数据库。
处理这种情况的最佳方法是什么?
我们是否应该为每个客户端创建单独的登录名并让应用程序使用单独的登录凭据进行连接?这将降低安全风险,但会产生大量的管理开销(这可能是值得的)。
后续问题是:在这种情况下我们应该使用 Windows AD 安全性还是 SQL Server 身份验证。
我很感激任何建议!
security ×10
sql-server ×8
permissions ×6
multi-tenant ×1
postgresql ×1
role ×1
schema ×1
sp-blitz ×1
sysdba ×1