630 likes | 830 Views
ç¬¬å…«ç« SQL Server 的安全. å¦ä¹ ç›®æ ‡. 了解 SQL Server 2000 安全管ç†æœºåˆ¶ï¼› 掌æ¡ç™»å½•å¸æˆ·å’ŒæœåŠ¡å™¨è§’色的设置; 掌æ¡æ•°æ®åº“用户和数æ®åº“角色的设置; 掌æ¡æƒé™ç®¡ç†çš„方法。. å¦ä¹ é‡ç‚¹. 登录å¸æˆ·ï¼› æ•°æ®åº“用户; æœåŠ¡å™¨è§’色与数æ®åº“角色; SQL Server 2000 çš„æƒé™ç®¡ç†ã€‚. 8.1 SQL Server 2000 的安全机制. SQL Server 2000 的安全机制å¯ä»¥åˆ’分为 4 个ç‰çº§. 8.1 SQL Server 2000 的安全机制. 第一级:客户端æ“作系统的安全性
E N D
学习目标 • 了解SQL Server 2000安全管理机制; • 掌握登录帐户和服务器角色的设置; • 掌握数据库用户和数据库角色的设置; • 掌握权限管理的方法。
学习重点 • 登录帐户; • 数据库用户; • 服务器角色与数据库角色; • SQL Server 2000的权限管理。
8.1 SQL Server 2000的安全机制 • SQL Server 2000的安全机制可以划分为4个等级
8.1 SQL Server 2000的安全机制 • 第一级:客户端操作系统的安全性 • 第二级:SQL Server 2000登录安全性 • 若要连接到 Microsoft SQL Server 2000 实例,需要给SQL Server 2000客户端应用程序提供下面中的信息: • .运行 SQL Server 2000实例的计算机所在的网络名称 • .实例名(可选,只有在连接到命名实例时才需要) • .登录标识符 (ID)
8.1 SQL Server 2000的安全机制 • SQL Server 2000提供的身份验证模式有两种,即: • 1.Windows身份验证模式 • 2. Windows和SQL Server验证模式
8.1 SQL Server 2000的安全机制 • 第三级:数据库使用的安全性 • 第四级:数据库对象使用的安全性
8.2 登录帐户和服务器角色 • 可以使用企业管理器来设置SQL Server 的身份验证模式 • 使用企业管理器添加标准SQL Server登录帐户
8.2.2 添加标准SQL Server 身份登录帐户 • 使用T-SQL添加标准SQL Server登录帐户的语法格式为: • sp_addlogin [ @loginame = ] 'login' • [ ,[ @passwd = ] 'password' ] • [ ,[ @defdb = ] 'database' ] • [ , [ @deflanguage = ] 'language' ]
8.2.2 添加标准SQL Server 身份登录帐户 • 例8.1创建了一个名叫“zhl”,密码是“88908123”,默认数据库为“students”的标准SQL Server登录帐户 • EXEC sp_addlogin 'zhl', '88908123', 'students' • GO
8.2.2 添加标准SQL Server 身份登录帐户 • 使用系统存储过程sp_defaultdb修改默认数据库。 • 语法格式: • sp_defaultdb [ @loginame = ] 'login' ,[ @defdb = ] 'database'
8.2.2 添加标准SQL Server 身份登录帐户 • 使用系统存储过程sp_defaultlanguage修改登录帐户的默认语言。 • 语法格式: • sp_defaultlanguage [ @loginame = ] 'login' [ , [ @language = ] 'language' ]
8.2.2 添加标准SQL Server 身份登录帐户 • 例8.2 将 pubs 设置为用户 zhl的默认数据库。 • EXEC sp_defaultdb 'zhl', 'pubs‘ • 例8.3 将 zhl帐户连接的默认英语设置为English。 • EXEC sp_defaultlanguage, 'zhl', 'English'
8.2.2 添加标准SQL Server 身份登录帐户 • 使用系统存储过程sp_password修改登录帐户的密码。 • 语法格式: • sp_password[[@old=]'old_password'][,[@new=]'new_password']
8.2.2 添加标准SQL Server 身份登录帐户 • 使用系统存储过程sp_droplogin删除SQL Server标准登录帐户。 • 语法格式: • sp_droplogin [ @loginame = ] 'login'
8.2.2 添加标准SQL Server 身份登录帐户 • 在SQL Server中删除帐户信息时,有如下限制: • .已经映射到数据库用户的帐户不允许被删除; • .系统帐户sa不能被删除,正在使用的帐户不能被删除; • .拥有数据库的帐户不能被删除。
8.2.2 添加标准SQL Server 身份登录帐户 • 例8.4 将 zhl帐户连接的密码由88908123设置为88999988 • EXEC sp_password '88908123', '88999988', 'zhl’ • 例8.5 删除zhl标准帐户。 • EXEC sp_droplogin, 'zhl'
8.2.3 添加Windows身份验证登录帐户 • 添加Windows身份验证登录帐户 • 所谓与Windows集成的登录帐户,实际上是将Windows的用户和工作组映射为SQL Server的登录帐户。 • 使用T-SQL添加Windows登录帐户 • 语法格式: • sp_grantlogin [@loginame =] 'login'
8.2.3 添加Windows身份验证登录帐户 • 例8.6 WINDOWS操作系统中已存在域cdny,用户js,现将其添加为SQL Server登录。 • sp_grantlogin [cdny\js]或sp_grantlogin ‘cdny\js’
8.2.3 添加Windows身份验证登录帐户 • 使用系统存储过程sp_revokelogin可以从SQL Server中删除用sp_grantlogin创建的Windows用户或组的登录项。 • 语法格式: • sp_revokelogin [ @loginame = ] 'login'
8.2.3 添加Windows身份验证登录帐户 • 拒绝Windows帐户登录 • 使用系统存储过程sp_denylogin可以设置不允许Windows的工作组或用户连接SQL Server服务器。 • 语法格式: • sp_denylogin [ @loginame = ] 'login'
8.2.3 添加Windows身份验证登录帐户 • 例8.7 删除’cdny\student’帐户或工作组的登录。 • EXEC sp_revokelogin ‘cdny\student’ • 例8.8 拒绝cdny/student帐户登录SQL Server。 • EXEC sp_denylogin [cdny\student]
8.2.4 特殊登录帐户sa • 特殊登录帐户sa • sa帐户拥有服务器和所有的数据库,即sa拥有最高的管理权限,可以执行服务器范围内的所有操作。 • sa帐户无法删除。
8.2.5 服务器角色 • 固定服务器角色用于对登录帐户授予服务器范围内的安全权限。 • System administrators 可执行SQL Server安装中的任何操作 • Security administrators 可管理服务器的登录 • Server administratorsq 可配置服务器范围的设置 • Setup administrators 可以管理扩展的存储过程 • Process administrators 可以管理运行在SQL Server中的进程 • Disk administrators 可以管理磁盘文件 • Database creators 可以创建和更改数据库 • Bulk inset administrators 可以执行大容量插入操作
8.2.5 服务器角色 • 使用系统存储过程浏览服务器角色: • Sp_helpsrvrole[[@srvrolename=]’role’] • 其中[@srvrolename=]’role’是指固定服务器角色的名称 • 例8.9 使用sp_helpsrvrole存储过程浏览本地服务器角色。 • EXEC sp_helpsrvrole
8.2.5 服务器角色 • 将一个帐户加入一个服务器角色,也可使用系统存储过程sp_addsrvrolemember。 • 语法格式: • sp_addsrvrolemember [ @loginame = ] 'login'[@rolename =] 'role'
8.2.5 服务器角色 • 例8.10 将固定服务器角色sysadmin分配给了登录帐户cdny\student1,使cdny\student1拥有了角色sysadmin所拥有的所有权限。 • EXEC sp_addsrvrolemember cdny\student1 ‘sysadmin’
8.2.5 服务器角色 • 使用系统存储过程浏览固定服务器角色的权限语法格式: • sp_srvrolepermission[[@srvrolename=]’role’] • 例8.11 EXEC sp_srvrolepermission ‘sysadmin’ --显示sysadmin角色的权限。 • EXEC sp_srvrolepermission --显示所有固定服务器角色的权限。
8.3.1 数据库用户 • 对于每个要求访问数据库的登录,应将其帐户添加到数据库,成为数据库用户。如果登录帐户不是数据库用户,则登录账户还是无法访问数据库。 • 1.使用企业管理器添加数据库用户 • 2.使用T-SQL添加数据库用户
8.3.1 数据库用户 • 2.使用T-SQL添加数据库用户 • 语法格式: • sp_grantdbaccess [@loginame=]'login'[,[@name_in_db=] 'name_in_db' [OUTPUT]]
8.3.1 数据库用户 • 例8.12 在pubs数据库中为 Windows NT 用户 cdny\leijin 添加帐户,并取名为 leijin。 • Use pubs • GO • EXEC sp_grantdbaccess ' cdny\leijin ', 'leijin' • GO
8.3.2 删除数据库用户 • 1.使用企业管理器删除数据库用户 • 2.使用系统存储过程sp_revokedbaccess删除数据库用户 • 语法格式: • sp_revokedbaccess [ @name_in_db = ] 'name'
8.3.2 删除数据库用户 • 例8.13 删除数据库用户leijin。 • USE pubs • GO • EXEC sp_revokedbaccess ‘leijin’ • GO
8.3.2 删除数据库用户 • 注意: • revokedbaccess 存储过程不能删除以下内容: • .dbo 、guest内置用户帐户; • .数据库中的固定角色。 • .Windows NT 组中的 Windows NT 用户。 • 在用户定义事务内部不能执行 sp_revokedbaccess
8.3.3 内置用户帐户 • 1.dbo用户 • (1)dbo 是具有在数据库范围内执行一切操作的内置用户。它是数据库的所有者。 • (2)固定服务器角色sysadmin的任何成员都映射到每个数据库内称为dbo 的一个特殊用户上。另外,由固定服务器角色sysadmin的任何成员创建的任何对象都自动属于dbo。 • (3)无法删除 dbo 用户,且此用户始终出现在每个数据库中。
8.3.3 内置用户帐户 • (4)只有由 sysadmin 固定服务器角色成员(或 dbo 用户)创建的对象才属于 dbo。由任何其他也不是 syadmin 固定服务器角色成员的用户(包括 db_owner 固定数据库角色成员)创建的对象: • .属于创建该对象的用户,而不是 dbo。 • .用创建该对象的用户名限定。 • (5)它的用户ID(UID)总是1
8.3.3 内置用户帐户 • 2.guest用户 • (1)guest 用户帐户允许没有用户帐户的登录访问数据库。 • (2)可以在除 master 和 tempdb 外(在这两个数据库中它必须始终存在)的所有数据库中添加或删除 guest 用户。
8.3.3 内置用户帐户 • (3)guest用户的存在意味着所有登录到SQL Server服务器的用户都可以访问数据库,即使它还没有成为本数据库的用户。 • (4)默认情况下,新建的数据库中没有 guest 用户帐户。
8.3.3 内置用户帐户 • 例8.14将 guest 用户帐户添加到名为 students 的数据库中。 • USE students • GO • EXECUTE sp_grantdbaccess guest • GO
8.3.4 数据库角色 • 固定数据库角色是在每个数据库中都存在的预定义组。 • 数据库管理员可以将一个用户加入到一个或多个数据库角色中。 • 固定数据库角色不能被添加、修改或删除。 • SQL Server在数据库级别上设置了固定数据库角色来提供基本的数据库权限管理。
8.3.4 数据库角色 • 固定数据库角色 描述 • db_owner 数据库所有者 • db_accessadmin 数据库访问管理员 • db_securityadmin 数据库安全管理员 • db_ddladmin 数据库 DDL 管理员 • db_backupoperator 数据库备份操作员 • db_datareader 数据库数据读取者 • db_datawriter 数据库数据写入者 • db_denydatareader 数据库拒绝数据读取者 • db_denydatawriter 数据库拒绝数据写入者
8.3.5 管理数据库角色 • 系统存储过程sp_addrole在当前数据库中创建新的数据库角色 • 语法格式: • sp_addrole [ @rolename = ] 'role'[ , [ @ownername = ] 'owner' ]
8.3.5 管理数据库角色 • 例8.15 将名为 teacher的新角色添加到studnets数据库中。 • EXEC sp_addrole 'teacher'
8.3.5 管理数据库角色 • 系统存储过程sp_addrolemember将某个数据库用户加入到某个数据库角色中 • 语法格式: • sp_addrolemember [ @rolename = ] 'role' ,[ @membername = ] 'security_account'
8.3.5 管理数据库角色 • 例8.16 将数据库用户加入到students数据库teacher角色中 • A. 添加 Windows NT 用户 • 将 Windows NT 登录帐户cdny\zhl 添加到 students 数据库,使其成为数据库用户 jszhl。然后,再将 jszhl 添加到students数据库的 teacher 角色中。 • USE students • GO • EXEC sp_grantdbaccess 'cdny\zhl', ‘jszhl’ • GO • EXEC sp_addrolemember 'teacher', 'jszhl'
8.3.5 管理数据库角色 • B. 添加 SQL Server 用户 • 将 SQL Server 用户 leijin添加到studetns数据库中的teacher角色。 • EXEC sp_addrolemember 'teacher', 'leijin'
8.3.5 管理数据库角色 • 系统存储过程sp_droprolemember从当前数据库中的数据库角色中删除安全帐户 • 语法格式: • sp_droprolemember [ @rolename = ] 'role' , [ @membername = ] 'security_account'
8.3.5 管理数据库角色 • 例8.17 从角色teacher 中删除用户leijin。 • EXEC sp_droprolemember 'teacher', 'leijin'
8.3.5 管理数据库角色 • 角色应用 • (1)public 角色 • public 角色是一个特殊的数据库角色,每个数据库用户都属于它。 • public 角色捕获数据库中用户的所有默认权限。 • 无法将用户、组或角色指派给public 角色,因为默认情况下它们即属于该角色。 • public 角色含在每个数据库中,包括 master、msdb、tempdb、model 和所有用户数据库。 • 无法除去public 角色。
8.3.5 管理数据库角色 • (2)应用程序角色 • 应用程序角色是一种特殊的数据库角色。 • 应用程序角色不包含任何成员,用户不允许添加到该角色中。