我正在使用不是我设计的 SQL Server 2016 数据库,也无法从根本上更改安全结构。我知道这可能是垃圾/最差的做法,但我必须玩我目前处理的那手牌。我试图限制对模式的访问仅限于角色的成员,但每个人似乎都有 db_datareader 成员资格。以下是详细信息:
我们将 ETL 将一些新数据写入现有数据库中他们自己的表中。所有这些“新”表都需要访问限制,因此只有某些用户可以查看。这是我的想法(使用假名):
- 创建名为“secret_schema”的新模式
- 创建 2 个新角色:'secret_schema_owner' (owner = dbo) 和 'secret_schema_reader' (owner = 'secret_schema_owner')
- 将“secret_schema”的所有者设置为“secret_schema_owner”角色
GRANT SELECT ON SCHEMA::secret_schema TO secret_schema_reader
这里的目标是只有“secret_schema_reader”角色的成员才能查看“secret_schema”模式内的表中的数据。问题是这个数据库的前任管理员只是将用户“db_datareader”授予数据库,这似乎胜过我尝试的角色安全性。
除了对安全/权限结构进行全面改革外,我还有其他选择吗?