如果我在这里没有正确使用一些术语,请提前道歉。我不是 DBA,但我是暂时被迫担任这个角色的。
我继承了一个在 SQL Server 2016 Enterprise 上运行的应用程序 - 一个实例用于 PROD,另一个实例用于 TEST。这些实例以“始终开启”的配置进行设置,因此我有一个用于 PROD 的可用性组和一个用于 TEST 的可用性组。每个可用性组中有两台服务器。每个实例都有多个数据库,但每个实例中只有一个数据库实际由应用程序使用 - 其他数据库看起来是为了测试目的而创建的。我只是提到还有其他数据库,以防万一它可能以某种我不知道的方式相关。
我有一个服务帐户的登录名(Windows 身份验证),并且该登录名映射到一些数据库中的同名用户。此服务帐户是 sysadmin 角色的成员。经过 IT 安全审核后,我被告知要删除此帐户的 SA 权限。我认为这不会给应用程序带来任何问题,但当然我想首先删除 TEST 实例中的权限,以便我可以确认应用程序由于某种原因不需要它们。
在测试实例中,我取消了登录的 sysadmin 角色,现在只选中了“公共”框,但我发现我仍然可以作为服务帐户登录并访问它之前有权访问的所有内容。它仍然可以访问主数据库中的所有表(这是我所期望的,因为该帐户已被授予对数据库中 dbo 架构的很多权限),但令我困惑的是它仍然可以查看服务器级别,我认为它会失去。
如果我在以服务帐户身份登录时运行此语句 ( SELECT * FROM fn_my_permissions(NULL, 'server');),则这是我获得的权限列表:
这些对我来说似乎是 SA 级别的权限,但我不明白它们来自哪里,因为 …