登陆:SQL Server2005中,有两种创建登录的方式:一种是Windows验证登录;另一种是SQL Server身份验证方式。“登录方式”就好比办公楼上使用不同类型的锁,一旦选择了使用什么类型的锁,就可以开始为每位员工配发钥匙,而这个钥匙就是 “登录”。或称“登录名”,但员工只有进入大楼的权利,但却没有权限查看和使用里面的资源(比如档案柜)。如果是sysadmin或 securityadmin固定服务器角色的成员,则可以创建两种类型的登录之一:标准登录(比如前面比喻中的金属钥匙)和Windows登录(比如较新 型的电子出入卡)。
用户:既然员工拥有了进入大楼的钥匙,就应该拥有适当的管理性访问权,他们需要通过访问其他资源来完成工作。例如,如果打算允许财务部访问账目文件,就需要给他们一把文件柜的钥匙。员工现在有两把钥匙:一把是打开大门的钥匙,一把是打开文件柜的钥匙。
同样,一旦用户已登录到了SQL Server上,就需要允许用户访问数据库。为此,需要创建数据库用户账户,然后给这些用户账户授予权限。一旦这个过程结束,SQL Server用户就拥有了多把钥匙:一把打开大门的钥匙(登录),以及一把打开他们需要访问的每个文件柜(数据库)的钥匙。
角色:会计需要签发公司支票,这个权限可以用两种方式之一来授予。第一,可以给每名会计分别提供一本从同一账户中支取的支票簿,并授予从该支票簿中开支票 的权限。在这种情况下,需要设法跟踪当月已经开出的全部支票,否则这种方法可能会造成可怕的后果。完成这项工作的最佳方法是让整个公司账户只使用一本支票 簿,并给所有会计授予从这本支票簿中开支票的一个组权限。
在SQL Server中,当几个用户需要访问数据库的权限时,比较容易的方法是将所有的权限作为一个组授给他们,而不是设法分别管理每个用户。
言归正传,先用存储过程实现以上操作:
–创建一个简单的登录,登录名为:newlogin;登录密码:123456;默认数据库:master,默认数据库也可以不指定。
EXEC sp_addlogin 'newlogin','123456','master'
–创建用户
–创建一个简单的用户,如果不指定用户名,则添加到当前数据库登录名中,如果不指定角色,则该用户默认属于public角色。下为添加newlogin登录名。
EXEC sp_adduser 'newlogin'
–创建一个带用户名的用户,用户可以与登录名相同(同上一种类似),也可以不同,但要设定当前登录名,用户角色可选,默认为public。下为将用户newuser添加到newlogin登录名中。
EXEC sp_adduser 'newlogin','newuser'
–创建角色
EXEC sp_addrole 'newrole'
–下为将用户下为将用户newuser添加到newlogin登录名中。并指定newrole角色。
EXEC sp_adduser 'newlogin','newuser','newrole'
–为角色newrole赋予jobs表的所有权限
GRANT ALL ON jobs TO newrole
–为角色newrole赋予sales表的查、改权限
GRANT SELECT,UPDATE ON sales TO newrole
–禁止角色newrole使用employees表的插入权限
DENY INSERT ON employees TO newrole
另一种创建用户和赋予角色的方式
–为登录newlogin在数据库中添加安全账户newuser
EXEC sp_grantdbaccess 'newlogin,'newuser'
–添加newuser为角色newrole的成员
EXEC sp_addrolemember 'newrole','newuser'
–数据库用户、角色、登录的删除操作
–删除当前数据库用户
EXEC sp_revokedbaccess 'newuser';
–删除数据库登录
EXEC sp_droplogin 'newlogin'
–删除数据库角色
EXEC sp_droprole 'newrole'
–从数据库角色(newrole)中删除用户(newuser)
EXEC sp_droprolemember 'newrole', 'newuser'
–用SQL代码新建登录、用户
–创建带密码的mylogin登录名,MUST_CHANGE 选项需要用户首次连接服务器时更改此密码。
CREATE LOGIN mylogin WITH PASSWORD = '123456' MUST_CHANGE;
–创建映射到凭据的登录名。
–以下示例将创建mylogin登录名。此登录名将映射到mycredential凭据。
CREATE LOGIN mylogin WITH PASSWORD = '123456', CREDENTIAL = mycredential;
–从Windows 域帐户创建登录名
–如果从Windows 域帐户映射登录名,则登录名必须用方括号([ ]) 括起来。
CREATE LOGIN [jack\xiangzhao] FROM WINDOWS;
–如果指定用户名,则不使用默认登录名作为该数据库用户
CREATE USER myuser FOR LOGIN mylogin
–以下示例将创建用户myuser拥有的数据库角色myrole
CREATE ROLE myrole AUTHORIZATION myuser;
–以下示例将创建db_role固定数据库角色拥有的数据库角色myrole
CREATE ROLE myrole AUTHORIZATION db_role;
==========================================================================
==========================================================================
==========================================================================
数据库所有者
dbo是具有在数据库中执行所有活动的暗示性权限的用户,将固定服务器角色 sysadmin 的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上。另外,由固定服务器角色 sysadmin 的任何成员创建的任何对象都自动属于 dbo。
如果用户 laone是固定服务器角色 sysadmin 的成员,并创建表 Table1,则表 Table属于 dbo,并以
dbo.Talble 而不是 laone.Table1 进行限定。相反,如果 laone不是固定服务器角色 sysadmin
的成员,而只是固定数据库角色 db_owner 的成员,并创建表 Table1,则 Table1属于 laone,并限定为
laone.Table1。
无法删除 dbo 用户,且此用户始终出现在每个数据库中。只有由 sysadmin 固定服务器角色成员(或 dbo
用户)创建的对象才属于 dbo。由任何其他也不是 syadmin 固定服务器角色成员的用户(包括 db_owner
固定数据库角色成员)创建的对象:属于创建该对象的用户,而不是 dbo,用创建该对象的用户名限定。
如何修改数据库的所有者
更改当前数据库的所有者。
语法
sp_changedbowner [ @loginame = ] 'login'
[ , [ @map = ] remap_alias_flag ]
参数
[@loginame =] 'login'
当
前数据库新所有者的登录 ID。login 为 sysname,没有默认值。login 必须是已存在的 SQL Server 登录或
Windows 用户。如果 login
通过当前数据库内的现有别名或用户安全帐户已拥有访问该数据库的权限,则不能成为该数据库的所有者。为了避免这种情况,应先除去当前数据库中的别名或用
户。
[@map =] remap_alias_flag
值为 true 或 false,表示旧数据库所有者
(dbo) 的现有别名是映射到当前数据库的新所有者还是要除去。remap_alias_flag 的数据类型为 varchar(5),默认值为
NULL,表示旧 dbo 的任何现有别名均映射到当前数据库的新所有者。false 表示除去旧数据库所有者的现有别名。
返回代码值
0(成功)或 1(失败)
注释
执行 sp_changedbowner 之后,新所有者称为数据库中的 dbo 用户。dbo 拥有执行数据库中所有活动的暗示性权限。
不能更改 master、model 或 tempdb 系统数据库的所有者。
若要显示有效 login 值的列表,请执行 sp_helplogins 存储过程。
执行只有 login 参数的 sp_changedbowner 会将数据库所有权改为 login,并将先前别名为 dbo 的用户别名映射到新数据库所有者。
权限
只有 sysadmin 固定服务器角色的成员可以执行 sp_changedbowner。
示例
下面的示例使用户 Albert 成为当前数据库的所有者,并将旧数据库所有者的现有别名映射到 Albert。
EXEC sp_changedbowner 'Albert'
本文作者:网友 来源:博客园 | http://www.oeom.cn/sql-login-user-role