标签: security

Sql Server 代理是系统管理员角色的一部分,即使 Sql Server 说它不是

我创建了一个除域用户之外没有额外权限的 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 角色的一部分。

我有一种感觉,我正在忽略某些东西。

security sql-server permissions sql-server-agent

6
推荐指数
1
解决办法
1212
查看次数

避免系统管理员权限

我将开始道歉,因为这是我的第一篇文章,并查看其他与我自己的情况不太匹配的问题,而且我是一名系统管理员,而不是 DBA,所以我对 SQL 的理解是生疏和有限的。

我的组织经常遇到供应商,他们为了运行他们的应用程序,他们执行我们所说的惰性编程并请求 SA 凭据或要求他们的自定义帐户具有系统管理员权限。我的组织也有数据保护/合规政策,要求我们仅授予所需的访问权限和权利。

最近,我与之合作的一个供应商希望他们的帐户是系统管理员,但它实际上只需要访问一个数据库。如果我们给 AD 帐户(因为他们的应用程序仅适用于 Windows 身份验证)系统管理员权限,我可以使用应用程序的 GUI 来浏览和选择数据库,但如果我们只将同一帐户设置为 DBOwner,我们将找不到任何东西。

有没有办法确定它是否正在尝试轮询其他数据库或确定所需数据库所需的最低权限级别是什么?当我尝试询问供应商时,我被告知:“它需要系统管理员权限,但没关系,因为它只访问一个数据库。” 当涉及到我们的政策时,这是不行的。

感谢您的任何建议。

security sql-server permissions sysdba

6
推荐指数
1
解决办法
593
查看次数

如何向用户定义的服务器角色授予对象权限?

我想创建被授予访问权限的登录名

  • 所有用户数据库
  • 查看所有定义

  • 选择所有表的所有记录

对我来说,将登录名分配给每个数据库并将其添加到自定义 db 角色或每个 db 中的默认 db 角色(如 db_datareader)似乎开销太大。

相反,我尝试使用用户定义的服务器角色。

  • 但是如何将所需的权限分配给用户定义的服务器角色以允许查看所有数据库的任何定义和 db_datareader?

  • 这甚至可能吗?

security sql-server permissions role sql-server-2016

6
推荐指数
1
解决办法
703
查看次数

为特定模式中的用户创建表权限

我想在数据库的 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 是否也可以在其他模式上创建表?

schema security sql-server permissions

6
推荐指数
2
解决办法
3万
查看次数

运行 sp_Blitz 所需的最低权限

我需要运行sp_BlitzGlenn Berry 的 Dr DMV 并为 SQL 2016 设置一堆 DMV 查询sp_Blitz。BrentOzar.com 上的文档指出“系统管理员权限。sp_Blitz® 检查大量系统级诊断数据。”

sysadmin 真的是所需的最低权限级别还是有人能够以更严格的权限级别运行它?

不确定我是否会在客户端的生产服务器上请求 sysadmin 权限。

security sql-server sql-server-2016 sp-blitz

6
推荐指数
1
解决办法
1346
查看次数

为什么用户无权访问数据库?

我有一个用户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用户。我猜那么用户识别不是基于用户名?

security sql-server permissions sql-server-2016

6
推荐指数
3
解决办法
5000
查看次数

一步禁用多次登录

有没有办法根据表中的一组用户禁用多个 sql 登录?例如:

ALTER LOGIN (Select userid from tbl_user) DISABLE;
Run Code Online (Sandbox Code Playgroud)

security sql-server ddl users logins

6
推荐指数
1
解决办法
907
查看次数

SQL Server 应用程序角色的用途

我一直在阅读 Microsoft SQL 服务器中的应用程序角色。应用程序角色似乎与任何其他角色一样,可以将安全对象的权限授予应用程序角色,但是,不同之处在于它必须由使用存储过程的应用程序“调用” sp_setapprole

我可以看到使用它的唯一原因是 DBA 允许应用程序(及其开发人员)连接到数据库,而不必提供服务器登录名或数据库用户,因此开发人员无法直接连接到 SQL Server(例如通过 SSMS),即使那样,我也看不到这样做的好处,因为提供给应用程序/开发人员的帐户肯定会被授予最低要求的权限吗?

我在这里错过了什么吗?

security sql-server role

6
推荐指数
1
解决办法
4833
查看次数

由于触发器执行,登录失败

我一直在尝试使用我的其中之一登录,sql server logins但收到以下错误消息:

一般错误信息

在此处输入图片说明

复制消息文本

TITLE: Connect to Server
------------------------------

Cannot connect to MY_SERVER.

------------------------------
ADDITIONAL INFORMATION:

Logon failed for login 'cola' due to trigger execution.
Changed database context to 'master'.
Changed language setting to us_english. (Microsoft SQL Server, Error: 17892)

For help, click: http://go.microsoft.com/fwlink?> ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=17892&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------
Run Code Online (Sandbox Code Playgroud)

高级信息

在此处输入图片说明

我知道下面的问题,但它略有不同,我已经尝试了那里所说的所有内容,但对我没有用,这就是我在这里提出这个问题的原因:

“由于触发器执行,登录 'sa' 登录失败。” 未定义 SA 登录触发器时

这里的这个问题也非常相似:

用户登录失败 - 错误:18456,严重性:14,状态:38

从这个我得到了以下信息:

用户登录失败 - 错误 18456 - 严重性 14,状态 38

1      'Account is locked out'
2      'User …
Run Code Online (Sandbox Code Playgroud)

security sql-server logins connections sql-server-2016

6
推荐指数
1
解决办法
2万
查看次数

如何判断我在通过 Windows 身份验证登录时使用了哪个 Windows 组登录名

我创建了两个对应于两个 Windows 组的 SQL Server 登录名:

MachineName\MyAppAmdin
MachineName\MyAppUser
Run Code Online (Sandbox Code Playgroud)

然后在数据库中,我创建了两个具有相同名称的用户并将它们映射到登录名。

在 Windows 服务器中,我将我的域帐户添加MyDomain\MyAccountMachineName\MyAppAmdin组中。

现在我可以通过 Windows 身份验证通过MyDomain\MyAccount.

问题是,我想确切地知道我正在使用哪个 Windows 组登录,但我不知道如何。

我试过:

ORIGINAL_LOGIN()
SYSTEM_USER
SUSER_SNAME
SELECT * FROM dm_exec_sessions
Run Code Online (Sandbox Code Playgroud)

以上所有内容都会返回MyDomain\MyAccount,但我需要知道的是我是否通过MachineName\MyAppAmdin.

总结一下,我的问题是:

有没有办法准确判断当前连接使用的是哪个 Windows 组登录(或用户)?

或者有什么方法可以检查是否MyDomain\MyAccount与特定用户或登录名相关联?

我知道我可以使用 C# 或命令来解析域帐户是否属于特定的 Windows 组,但是我们有一些新的 IT 策略,所以我正在考虑使用 TSQL 实现类似结果的方法。

security sql-server t-sql sql-server-2012 logins

6
推荐指数
1
解决办法
2555
查看次数