SSDT - 不更改用户权限,但更改表权限?

Posted

技术标签:

【中文标题】SSDT - 不更改用户权限,但更改表权限?【英文标题】:SSDT - Do not alter user permissions, but alter table permissions? 【发布时间】:2019-05-07 14:27:05 【问题描述】:

发布数据库项目时,我想授予/撤销对对象(例如视图或表)的权限,这些对象是构建中定义的对象。我不希望 SSDT 考虑用户权限。

例如,当删除表文件中的权限时,我希望它只更改构建中对象的权限,但它也会更改用户的权限。

我想要:

REVOKE SELECT
ON OBJECT::[dbo].[myTable] TO [myRole] CASCADE
AS [dbo];

我不想:

REVOKE CONNECT TO [Domain\MyUser] CASCADE;

当我勾选 [x] 不放弃权限时,它会带走两者,当我包含它时,它会包括两种类型。

我还勾选了 [x] 排除用户,但没有成功。

有没有办法做到这一点或可能的解决方法?

谢谢。

【问题讨论】:

【参考方案1】:

考虑使用部署后脚本来获得您描述的确切行为。

【讨论】:

那么您会从表等对象定义文件中删除权限,并通过部署后脚本管理权限吗? 一般来说,没有。通常我使用双重抽象来管理权限。根据业务功能创建数据库角色。为角色分配权限。将所有用户分配到 Windows/AD 组。将组添加为登录名和用户。将组添加为相应数据库角色的成员。使独立管理权限和用户变得容易。此方案也适用于部署后脚本,尤其是当您有不同的环境(例如 dev、uat、qa、prod)具有不同的权限要求时。 好的,假设我在数据库项目之外管理用户。然后,您将如何在表/视图上添加选择权限?将其添加到表/视图文件并创建部署后脚本?还是仅创建一个部署后脚本,但表定义无法正确反映其在文件中的权限? 基本上,在部署后进行,利用双重抽象。特别是因为我经常处理可部署在不同 AD 域和安全要求中的项目。我的表定义不包含权限信息。对我来说,这反映了 SQL 如何查看对象和权限。它们是不同的东西,可以(应该?)独立管理。 我倾向于通过将权限授予角色而不是用户来处理权限。您将用户置于适合他们需要的角色中。这可能是处理它的更好方法,然后在 SSDT 之外处理用户/角色,或者使用单独的脚本从角色中添加/删除用户。我也倾向于使用在每个环境中用户都不同的系统,因此无论如何都需要抽象这些权限,但使用执行操作的角色仍然更容易获得许可。

以上是关于SSDT - 不更改用户权限,但更改表权限?的主要内容,如果未能解决你的问题,请参考以下文章

linux如何切换到root用户和更改环境变量

如何更改文件权限

权限管理

使用sql语句怎么更改用户密码。或新建一个sysadmin权限的新用户

文件访问权限:更改用户ID

权限覆盖不更改不和谐频道权限。不和谐.py