Nia*_*ian 5 sql-server-2008 security permissions
多年来,我一直作为 SQL Server 的开发人员工作,但没有问“什么是dbo
”这个问题,这很遗憾。最近一直在研究SQL Server 2008的安全模型,被很多概念淹没了。请为我澄清一些概念,并纠正我的错误。我不需要对所有事情进行彻底的解释,只需要一个想法是什么以及所涉及的关系:
LOGIN: Server level (SQL Server login or Windows login).
USER: Database level (a user is mapped to a login).
ROLE: Users belong to a role. Can be at server level or at database level
with permissions attached.
SCHEMA: Database objects belong to a schema (or dbo by default)
PERMISSION:
For database objects or schema. A user or a role has permissions for
an object or a schema.
OWNER: Is it the user who created a object or schema? What does it do?
How does it work? Where I can see the owner of a object in SSMS?
I see only schema.object
Run Code Online (Sandbox Code Playgroud)
所有者是拥有特定对象所有权的数据库主体,赋予该主体对该对象的完全权限(包括 ALTER、SELECT、INSERT、UPDATE 和 DELETE)。该主体可以是数据库用户或架构,具体取决于创建对象的上下文以及创建对象的主体的权限。在没有显式对象所有权的情况下,该对象由相关架构所有者拥有。
每个数据库中还存在db_owner 角色。该角色的成员被视为拥有数据库以及该数据库中所有对象的所有权。本质上,db_owner 角色的成员在该特定数据库中拥有“sysadmin/sa”权限。
“dbo”是默认数据库用户,它是 db_owner 角色的成员。此外,还创建“dbo”模式并将其用作默认模式以在其中创建对象。该架构由“dbo”用户拥有。
要查看对象所有权,您可以对 DMV 使用以下查询:
select
SCHEMA_NAME(s.schema_id)+'.'+OBJECT_name(o.object_id) [ObjectName]
,u.name [ObjectOwner]
,so.name [SchemaOwner]
from
sys.objects o
left join sys.schemas s on (o.schema_id = s.schema_id)
left join sys.database_principals so on (s.principal_id = so.principal_id)
left join sys.database_principals u on (o.principal_id = u.principal_id)
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,您可以阅读Aaron 的链接或 Kathi Kellenberger 的这篇文章。