相关疑难解决方法(0)

SQL Server:权限模式如何?

受到我见过的各种架构相关问题的启发......

如果存储过程和表都在同一模式中,则所有权链接允许我对存储过程进行GRANT EXECUTE,而不对我使用的表具有显式权限.

如果我们使用单独的模式,那么我必须在不同的模式表上显式GRANT XXX.所有权链接示例证明了这一点.这意味着存储的proc执行用户可以直接读/写表.

这就像直接访问类中的实例变量一样,绕过getter/setter,打破封装.

我们还使用行级安全性来限制某人看到的内容,并将其应用于存储过程.

那么,我们如何维护模式分离并防止直接表访问?

当然,如果您使用ORM或不使用存储过程,则该问题将不适用.但我不会问我是否应该使用ORM或存储过程,以防有人觉得需要启发我...

编辑,例如

CREATE USER OwnsMultiSchema WITHOUT LOGIN
GO
CREATE SCHEMA MultiSchema1 AUTHORIZATION OwnsMultiSchema
GO
CREATE SCHEMA MultiSchema2 AUTHORIZATION OwnsMultiSchema
GO

CREATE USER OwnsOtherSchema WITHOUT LOGIN
GO
CREATE SCHEMA OtherSchema AUTHORIZATION OwnsOtherSchema
GO

CREATE TABLE MultiSchema1.T1 (foo int)
GO
CREATE TABLE MultiSchema2.T2 (foo int)
GO
CREATE TABLE OtherSchema.TA (foo int)
GO

CREATE PROC MultiSchema1.P1
AS
SELECT * FROM MultiSchema1.T1
SELECT * FROM MultiSchema2.T2
SELECT * FROM OtherSchema.TA
Go
EXEC …
Run Code Online (Sandbox Code Playgroud)

permissions schema encapsulation sql-server-2005 sql-server-2008

25
推荐指数
3
解决办法
6万
查看次数