Sql server SQL Server:通过存储过程访问架构
我有两个模式,Sql server SQL Server:通过存储过程访问架构,sql-server,database,database-schema,Sql Server,Database,Database Schema,我有两个模式,schema\u ui和schema\u logic schema\u logic用于特权用户,我将在此模式中定义我的表schema\u ui用于功能受限的受限用户,因此他们无法访问schema\u logic中的表 我在schema\u ui中创建了一个sp\u ReadTable1,这个存储过程从schema\u逻辑中的Table1中读取。user1具有受限权限,只能访问,schema\u ui。现在user1可以访问sp_ReadTable1,但是当存储过程从table1中读
schema\u ui
和schema\u logic
schema\u logic
用于特权用户,我将在此模式中定义我的表schema\u ui
用于功能受限的受限用户,因此他们无法访问schema\u logic
中的表
我在schema\u ui
中创建了一个sp\u ReadTable1
,这个存储过程从schema\u逻辑中的Table1
中读取。user1具有受限权限,只能访问,schema\u ui
。现在user1可以访问sp_ReadTable1
,但是当存储过程从table1中读取时,他真的可以执行它吗
因此,类似于C#public方法的东西,它返回私有成员…对于类似的东西,我在模式中的所有sp上使用
和EXECUTE AS OWNER
,创建一个角色,授予该模式的EXECUTE权限,并将用户分配给该角色。旁注:存储过程不应使用sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀!对于类似的情况,我在架构中的所有sp上使用和EXECUTE AS OWNER
,创建一个角色,授予该架构的EXECUTE权限,并将用户分配给该角色。旁注:您不应该在存储过程中使用sp_
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀!