固定服务器角色,限制登录sql的用户权限
 
sysadmin       可以在 SQL Server 中执行任何活动。 
serveradmin    可以设置服务器范围的配置选项,关闭服务器。 
setupadmin     可以管理链接服务器和启动过程。 
securityadmin 可以管理登录和 CREATE DATABASE 权限,还可以读取错误日志和更改密码。 
processadmin   可以管理在 SQL Server 中运行的进程。 
dbcreator      可以创建、更改和除去数据库。 
diskadmin      可以管理磁盘文件。 
bulkadmin      可以执行 BULK INSERT 语句。 
数据库角色
3种 固定,定制和应用程序固定数据库角色 描述 
db_owner        在数据库中有全部权限。 
db_accessadmin   可以添加或删除用户 ID。 
db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。 
db_ddladmin      可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。 
db_backupoperator 可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。 
db_datareader     可以选择数据库内任何用户表中的所有数据。 
db_datawriter     可以更改数据库内任何用户表中的所有数据。 
db_denydatareader 不能选择数据库内任何用户表中的任何数据。 
db_denydatawriter 不能更改数据库内任何用户表中的任何数据。 
只要将用户加入角色,即可获得相应的权限定制数据库角色
比如用户只需要数据库的select,update权限,这时就要使用定制角色,生成定制数据库角色时,对其指定权限,然后将用户指定为这个角色,而固定数据库角色不需要指定权限应用程序角色
如果用户通过应用程序访问数据库,这时应该使用应用程序角色,sql server不再看到用户本身,而只看到应用程序,并响应应用程序角色提供权限
权限状态:
提供grant 提供用户使用特定权限 
取消revoke 取消的权限没有特别指定,用户可以从上层角色继承这个权限,比如取消用户A的select权限,但A所在的角色有select权限,则A仍可读取拒绝deny 拒绝了用户的权限,无法再获得相应活动

解决方案 »

  1.   

    用户
    用户标识符 (ID) 在数据库内标识用户。在数据库内,对象的全部权限和所有权由用户帐户控制。用户帐户与数据库相关。sales 数据库中的 xyz 用户帐户不同于 inventory 数据库中的 xyz 用户帐户,即使这两个帐户有相同的 ID。用户 ID 由 db_owner 固定数据库角色成员定义。登录 ID 本身并不提供访问数据库对象的用户权限。一个登录 ID 必须与每个数据库中的一个用户 ID 相关联后,用这个登录 ID 连接的人才能访问数据库中的对象。如果登录 ID 没有与数据库中的任何用户 ID 显式关联,就与 guest 用户 ID 相关联。如果数据库没有 guest 用户帐户,则该登录就不能访问该数据库,除非它已与一个有效的用户帐户相关联。用户 ID 在定义时便与一个登录 ID 相关联。例如,db_owner 角色成员可以使 Microsoft® Windows® 2000 登录 NETDOMAIN\Joe 与 sales 数据库中的用户 ID abc 和 employee 数据库中的用户 ID def 相关联。默认情况下,登录 ID 和用户 ID 相同。下例说明给 Windows 2000 帐户授予对数据库的访问权限,并使该登录与数据库中的用户相关联:USE master
    GO
    sp_grantlogin 'NETDOMAIN\Sue'
    GO
    sp_defaultdb @loginame = 'NETDOMAIN\Sue', defdb = 'sales'
    GO
    USE sales
    GO
    sp_grantdbaccess 'NETDOMAIN\Sue', 'Sue'
    GO在 sp_grantlogin 语句中,授予 Windows 2000 用户 NETDOMAIN\Sue 访问 Microsoft SQL Server™ 2000 的权限。sp_defaultdb 语句使 sales 数据库成为该用户的默认数据库。sp_grantdbaccess 语句给 NETDOMAIN\Sue 登录提供了访问 sales 数据库的权限,并将其在 sales 内的用户 ID 设置成 Sue。下例说明定义 SQL Server 登录,指派默认数据库,并使该登录与数据库中的用户相关联:USE master
    GO
    sp_addlogin @loginame = 'TempWorker', @password = 'fff', defdb = 'sales'
    GO
    USE sales
    GO
    sp_grantdbaccess 'TempWorker'
    GOsp_addlogin 语句定义了一个供各种临时工作人员使用的 SQL Server 登录。该语句还将 sales 数据库指定为此登录的默认数据库。sp_grantdbaccess 语句给 TempWorker 登录授予了对 sales 数据库的访问权限,由于没有指定用户名,默认为 TempWorker。数据库中的用户由用户 ID 而非登录 ID 标识。例如,在每个数据库中,sa 是映射到特殊用户帐户 dbo(数据库所有者)的登录帐户。所有与安全有关的 Transact-SQL 语句都将该用户 ID 作为 security_name 参数使用。如果 sysadmin 固定服务器角色成员和 db_owner 固定数据库角色成员对系统进行设置,使每个用户的登录 ID 和用户 ID 都相同,就不容易混淆权限的管理和理解,但不必非这样做。在 SQL Server 数据库中,guest 帐户是特殊的用户帐户。如果用户使用 USE database 语句访问的数据库中没有与此用户关联的帐户,此用户就与 guest 用户相关联。
      

  2.   


    Microsoft® SQL Server™ 2000 或 SQL Server 7.0 版中没有组。然而,可以在整个 Microsoft Windows NT® 或 Microsoft Windows® 2000 组的级别上管理 SQL Server 安全性。如果使用 sp_grantlogin 并给 Windows NT 或 Windows 2000 组指定了名称,该组中的所有成员都可以使用 Windows 身份验证连接到 SQL Server。在授予该组建立连接后,可以使用 sp_grantdbaccess 将该组中的成员与他们需要访问的每个数据库中的一个用户标识符 (ID) 相关联。可以使用两种方法: 将该组与数据库中的一个用户 ID 相关联。 
    在这种情况下,该组的所有成员都将在引用数据库时与那个用户 ID 相关联。将 Windows NT 或 Windows 2000 组中的个别用户帐户与数据库中的某个用户 ID 相关联。 
    这个用户帐户在引用数据库时将与那个用户 ID 相关联。组中没有任何其它帐户会与那个用户 ID 相关联,它们将指派给与该组登录相关联的用户 ID。假设有一个 Windows NT 或 Windows 2000 组 NETDOMAIN\Managers,它包含三个成员:NETDOMAIN\Sue、NETDOMAIN\Fred 和 NETDOMAIN\Mary。下列 Transact-SQL 语句将 Windows NT 或 Windows 2000 组同时作为登录和用户添加到 sales 数据库中,然后将 NETDOMAIN\Sue 与一个特定的用户 ID 相关联:USE master
    GO
    -- Authorize all members of NETDOMAIN\Managers to connect
    -- using Windows Authentication.
    sp_grantlogin 'NETDOMAIN\Managers'
    GO
    -- Make sales the default database for all members.
    sp_dbdefault 'NETDOMAIN\Managers', 'sales'
    USE sales
    GO
    -- Grant all members of the group access to sales
    -- No user ID is specified, so SQL Server creates
    -- one named 'NETDOMAIN\Managers'
    sp_grantdbaccess 'NETDOMAIN\Managers'
    GO
    -- Grant a specific member of the group access to
    -- sales with a specific user.
    sp_grantdbaccess 'NETDOMAIN\Sue', 'Sue'现在可以给用户 NETDOMAIN\Managers 或用户 Sue 授予权限:USE sales
    GO
    GRANT SELECT ON SalesTable TO NETDOMAIN\Managers
    GO
    GRANT UPDATE ON SalesTable to NETDOMAIN\Sue适用于 NETDOMAIN\Sue 的权限是对用户 NETDOMAIN\Managers 或用户 Sue 授予、废除或拒绝的权限的并集。任何 DENY 权限替代任何相应的 GRANT 权限。除非 Windows NT 或 Windows 2000 帐户已与特定的用户相关联,否则组成员受限于指派给该组所关联用户的权限。不过,如果组成员创建了对象,对象的所有者名称就是它们的 Windows NT 或 Windows 2000 帐户名,而不是组名。考察 NETDOMAIN\Manager 帐户。如果 NETDOMAIN\Fred 连接到 sales 数据库,他就能看见所有已给 NETDOMAIN\Managers 授予了 SELECT 权限的表。如果 NETDOMAIN\Fred 执行下列语句,表就创建成 sales.NETDOMAIN\Fred.TableX,而不是 sales.NETDOMAIN\Managers.TableX:CREATE TableX (cola INT PRIMARY KEY, colb CHARACTER(200))
      

  3.   

    角色
    角色是一个强大的工具,使您得以将用户集中到一个单元中,然后对该单元应用权限。对一个角色授予、拒绝或废除的权限也适用于该角色的任何成员。可以建立一个角色来代表单位中一类工作人员所执行的工作,然后给这个角色授予适当的权限。当工作人员开始工作时,只须将他们添加为该角色成员,当他们离开工作时,将他们从该角色中删除。而不必在每个人接受或离开工作时,反复授予、拒绝和废除其权限。权限在用户成为角色成员时自动生效。Microsoft® Windows NT® 和 Windows® 2000 组的使用方式与角色很相似。有关更多信息,请参见组。 如果根据工作职能定义了一系列角色,并给每个角色指派了适合这项工作的权限,则很容易在数据库中管理这些权限。之后,不用管理各个用户的权限,而只须在角色之间移动用户即可。如果工作职能发生改变,则只须更改一次角色的权限,并使更改自动应用于角色的所有成员,操作比较容易。在 Microsoft® SQL Server™ 2000 和 SQL Server 7.0 版中,用户可属于多个角色。以下脚本说明登录、用户和角色的添加,并为角色授予权限。USE master
    GO
    sp_grantlogin 'NETDOMAIN\John'
    GO
    sp_defaultdb 'NETDOMAIN\John', 'courses'
    GO
    sp_grantlogin 'NETDOMAIN\Sarah'
    GO
    sp_defaultdb 'NETDOMAIN\Sarah', 'courses'
    GO
    sp_grantlogin 'NETDOMAIN\Betty'
    GO
    sp_defaultdb 'NETDOMAIN\Betty', 'courses'
    GO
    sp_grantlogin 'NETDOMAIN\Ralph'
    GO
    sp_defaultdb 'NETDOMAIN\Ralph', 'courses'
    GO
    sp_grantlogin 'NETDOMAIN\Diane'
    GO
    sp_defaultdb 'NETDOMAIN\Diane', 'courses'
    GO
    USE courses
    GO
    sp_grantdbaccess 'NETDOMAIN\John'
    GO
    sp_grantdbaccess 'NETDOMAIN\Sarah'
    GO
    sp_grantdbaccess 'NETDOMAIN\Betty'
    GO
    sp_grantdbaccess 'NETDOMAIN\Ralph'
    GO
    sp_grantdbaccess 'NETDOMAIN\Diane'
    GO
    sp_addrole 'Professor'
    GO
    sp_addrole 'Student'
    GO
    sp_addrolemember 'Professor', 'NETDOMAIN\John'
    GO
    sp_addrolemember 'Professor', 'NETDOMAIN\Sarah'
    GO
    sp_addrolemember 'Professor', 'NETDOMAIN\Diane'
    GO
    sp_addrolemember 'Student', 'NETDOMAIN\Betty'
    GO
    sp_addrolemember 'Student', 'NETDOMAIN\Ralph'
    GO
    sp_addrolemember 'Student', 'NETDOMAIN\Diane'
    GO
    GRANT SELECT ON StudentGradeView TO Student
    GO
    GRANT SELECT, UPDATE ON ProfessorGradeView TO Professor
    GO该脚本给 John 和 Sarah 教授提供了更新学生成绩的权限,而学生 Betty 和 Ralph 只能选择他们自己的成绩。Diane 因同时教两个班,所以添加到两个角色中。ProfessorGradeView 视图应将教授限制在自己班学生的行上,而 StudentGradeView 应限制学生只能选择自己的成绩。SQL Server 2000 和 SQL Server 7.0 版在安装过程中定义几个固定角色。可以在这些角色中添加用户以获得相关的管理权限。下面是服务器范围内的角色。固定服务器角色 描述 
    sysadmin 可以在 SQL Server 中执行任何活动。 
    serveradmin 可以设置服务器范围的配置选项,关闭服务器。 
    setupadmin 可以管理链接服务器和启动过程。 
    securityadmin 可以管理登录和 CREATE DATABASE 权限,还可以读取错误日志和更改密码。 
    processadmin 可以管理在 SQL Server 中运行的进程。 
    dbcreator 可以创建、更改和除去数据库。 
    diskadmin 可以管理磁盘文件。 
    bulkadmin 可以执行 BULK INSERT 语句。 
    可以从 sp_helpsrvrole 获得固定服务器角色的列表,可以从 sp_srvrolepermission 获得每个角色的特定权限。每个数据库都有一系列固定数据库角色。虽然每个数据库中都存在名称相同的角色,但各个角色的作用域只是在特定的数据库内。例如,如果 Database1 和 Database2 中都有叫 UserX 的用户 ID,将 Database1 中的 UserX 添加到 Database1 的 db_owner 固定数据库角色中,对 Database2 中的 UserX 是否是 Database2 的 db_owner 角色成员没有任何影响。固定数据库角色 描述 
    db_owner 在数据库中有全部权限。 
    db_accessadmin 可以添加或删除用户 ID。 
    db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。 
    db_ddladmin 可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。 
    db_backupoperator 可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。 
    db_datareader 可以选择数据库内任何用户表中的所有数据。 
    db_datawriter 可以更改数据库内任何用户表中的所有数据。 
    db_denydatareader 不能选择数据库内任何用户表中的任何数据。 
    db_denydatawriter 不能更改数据库内任何用户表中的任何数据。 
    可以从 sp_helpdbfixedrole 获得固定数据库角色的列表,可以从 sp_dbfixedrolepermission 获得每个角色的特定权限。数据库中的每个用户都属于 public 数据库角色。如果想让数据库中的每个用户都能有某个特定的权限,则将该权限指派给 public 角色。如果没有给用户专门授予对某个对象的权限,他们就使用指派给 public 角色的权限。