我们为地热行业提供专业的数据管理软件。有时,数据库结构需要更改,我们会发布新版本的软件,该软件会在每次打开数据库时自动更新数据库结构。在大多数公司中,IT 人员会安装新版本,但通常不知道需要运行程序、选择和打开每个数据库并运行更新程序(这似乎超出了他们的职责范围)。因此,当用户启动程序时,数据库不会更新,他们也没有权限这样做。
显而易见的“解决方案”是让一个用户成为指定数据库的 db_owner 角色的成员,并授予他们更新数据库的权限(在我们的程序中设置)。但是,这不起作用,因为任何新表都由该用户“拥有”,其他用户看不到。因此,db_owner 角色在创建新表方面并不等同于 dbo。
有些公司会为所有用户分配指定数据库的 db_owner 角色。这种做法很好,但许多 IT 人员并不赞同为所有用户分配如此高级别的权限。
因此,我的问题是 - 是否可以向指定数据库授予真正的 dbo 类型权限,以便程序的所有用户都可以轻松使用新表。据我所知,SQL Server 无法提供真正的 dbo 角色,而只能向有限的数据库提供,这是该程序的一个严重缺陷,尤其是对于数据由用户“拥有”的数据库应用程序。
答案1
没有讨论授予非 IT 管理员用户数据库管理员权限的安全问题。
要解决以下问题:
显而易见的“解决方案”是让一个用户成为指定数据库的 db_owner 角色的成员,并授予他们更新数据库的权限(在我们的程序中设置)。但是,这不起作用,因为任何新表都由该用户“拥有”,其他用户看不到。因此,db_owner 角色在创建新表方面并不等同于 dbo。
在新的 SQL 对象前加上“dbo”前缀,例如
CREATE TABLE dbo.NewTable1( ... )
CREATE PROCEDURE dbo.NewProcedure1 ...