“拥有的架构”的含义/用途是什么?

N.D*_*ddy 7 t-sql database-administration sql-server-2012

我试图了解 SQL Server 的安全性,我不确定OwnedSchema. 有人可以在这方面帮助我吗,它在何处发挥重要作用?

在此处输入图片说明

sep*_*pic 1

图片上的对话框列出了所有数据库的模式,如果当前数据库主体是这些模式的所有者,则将某些模式标记为“已选中”。

所以它会向您显示此查询的结果(您可以使用 捕获Profiler):

SELECT
s.name AS [Name],
s.schema_id AS [ID],
ISNULL(dp1.name, N'') AS [Owner],
CAST(
      case when s.name in ('dbo','guest','INFORMATION_SCHEMA','sys','db_owner','db_accessadmin','db_securityadmin','db_ddladmin','db_backupoperator','db_datareader','db_datawriter','db_denydatareader', 'db_denydatawriter') then 1 else 0 end AS bit) AS [IsSystemObject]
FROM
sys.schemas AS s
LEFT OUTER JOIN sys.database_principals AS dp1 
   ON dp1.principal_id = s.principal_id
Run Code Online (Sandbox Code Playgroud)

使用此对话框,您可以将架构的所有者更改为当前用户,即执行以下代码:

ALTER AUTHORIZATION ON SCHEMA::[this_schema] TO [this_user]
Run Code Online (Sandbox Code Playgroud)

此链接对于了解SQL Server 中的所有权和用户架构分离也很有用。

架构所有者和权限

架构可以由任何数据库主体拥有,并且单个主体可以拥有多个架构。您可以将安全规则应用于架构,该架构中的所有对象都会继承这些规则。一旦您设置了架构的访问权限,当新对象添加到架构中时,这些权限将自动应用。可以为用户分配默认模式,并且多个数据库用户可以共享相同的模式。默认情况下,当开发人员在架构中创建对象时,这些对象由拥有该架构的安全主体(而不是开发人员)拥有。可以使用 ALTER AUTHORIZATION Transact-SQL 语句转移对象所有权。架构还可以包含由不同用户拥有的对象,并且具有比分配给架构的权限更细化的权限,但不建议这样做,因为这会增加管理权限的复杂性。对象可以在模式之间移动,模式所有权可以在主体之间转移。可以删除数据库用户而不影响架构。