使用SQL Server(2008),是否可以授予特定用户对特定模式下对象的完全控制权?这包括创建/删除/警报表。重要的是,不要不为该用户授予
db_ddladmin
角色,因为这将使他能够访问其他表。
您可以在数据库中创建一个角色,为该角色分配所有适当的权限(SELECT、UPDATE、DELETE、EXECUTE 等),然后将用户分配给该角色。
我知道这个问题很久以前就被问过,但现在我也有同样的问题,只不过我在 MS SQL Server 2022 上运行。尽管如此,我认为解决方案至少自 MS SQL Server 2014 以来一直是相同的,从那时起文档就不够清晰了。根据“数据库引擎权限海报”(https://aka.ms/sql-permissions-poster,图表“数据库权限 - 架构对象”)上的注释,用户应该有权创建所需的对象类型对数据库的权限以及对对象或整个架构的 CONTROL 或 ALTER 权限。在实践中,我做到了:
CREATE SCHEMA [my_schema] AUTHORIZATION [dbo]
GO
CREATE ROLE [myschema_ddladmin] AUTHORIZATION [dbo];
GRANT CREATE AGGREGATE,
CREATE DEFAULT,
CREATE FUNCTION,
CREATE PROCEDURE,
CREATE SYNONYM,
CREATE TABLE,
CREATE TYPE,
CREATE VIEW
TO [myschema_ddladmin];
GRANT ALTER,
CREATE SEQUENCE,
DELETE,
EXECUTE,
INSERT,
REFERENCES,
SELECT,
UPDATE,
VIEW CHANGE TRACKING,
VIEW DEFINITION
ON SCHEMA::[my_schema]
TO [myschema_ddladmin];
GO
ALTER ROLE [myschema_ddladmin]
ADD MEMBER [my_user];
GO