数据库设计实验(6)—— 数据库安全管理

一、目的与要求

  1. 掌握创建用户和角色的方法
  2. 掌握SQL授权命令和收回权限的命令

、实验准备

  1. 了解SQL Server登录身份和登录模式的概念;
  2. 了解用户、角色、登录三者的概念;
  3. 了解权限授予和收回的的T-SQL语法。

、实验内容

(一)创建登录名

1.创建新的登录名testlogin
(1)在对象资源管理器的目录树中“安全性”à“登录名”,点击右键选择“新建登录名”,设置登录名为testlogin,“SQL Server身份验证”密码为abc,默认数据库为“studentdb”,如图所示。

        提问:此时用testlogin登录名创建新的连接,登录到对象资源管理器,是否能登录成功?

        答:不能

右击testlogin登录名,选择属性,设置“用户映射”,设置“映射到此登录名的用户“为“studentdb”,如图所示。这里即是创建和登录名同名的用户,该用户属于默认数据库。这个用户具有的数据库角色是public。

    (2)确定后再次以testlogin及其密码登录查ssms,在testlogin登录名下新建查询。运行命令:select * from st_info,查看并记录结果。

            提问:此时是否查询命令能查询到st_info表中的数据?为什么?

            答:不能,没有对对象 'st_info' (数据库 'studentdb',架构 'dbo')的 SELECT 权限

      (3)若要查询studentdb数据库中表的数据,则要在数据库角色成员身份中选择db_datareader角色(回到sa登录下设置该登录名的属性),再运行上题中的查询语句,查看结果。

      操作:

      1.打开SQL Server Management Studio (SSMS),使用sa登录。

      2.在对象资源管理器中,展开“安全性”文件夹,然后展开“登录名”文件夹。

      3.右键单击要设置属性的登录名,然后选择“属性”。

      4.在“属性”窗口中,选择“用户映射”页签。

      5.在“已关联的用户”列表中,选择studentdb数据库。

      6.在“数据库角色成员身份”列表中,选择db_datareader角色(如图6)。

      7.点击“确定”保存更改。

        (4)在查询编辑器中运行命令

        查看是否允许(如下图1)。若不允许,则要在数据库角色成员身份中选择db_datawriter角色(如下图2)。重新运行该条更新语句,查看结果(如下图3)。

        提问:testlogin登录名登录后,允许访问服务器上所有的数据库吗?能访问哪些数据库?

        答:

                默认情况下,新创建的登录名不会被分配到任何服务器角色或数据库角色。因此,testlogin登录名登录后,不会自动允许访问服务器上的所有数据库。如果希望testlogin登录名能够访问服务器上的所有数据库,可以将其添加到服务器级别的sysadmin角色中。sysadmin角色具有最高权限,拥有对服务器上所有数据库的完全访问权限。

                能访问studentdb数据库

        (二)创建用户

                创建用户时选择映射到已有登录名,即令一个登录名可以访问多个数据库。

                一个新的登录名(如testlogin)创建后,在其默认数据库下会建立一个同名用户(testlogin),即用户testlogin允许访问登录名默认的数据库studentdb。而要用testlogin登录后能访问其他数据库,则要在其他数据库中创建新用户,映射到testlogin这个登录名,这样登录后就可以访问其他数据库了。如,在studb数据库下创建一个新用户U1,属于testlogin登录名。

        (1)回到sa登录下,展开“studb”数据库à”安全性”à“用户”,右击“新建用户”,填写用户名为U1,如下图1,点对话框按钮,选择登录名如下图2,点击“浏览”,选择testlogin,如下图3。

                提问:若要在“studentdb”数据库中创建映射到testlogin登录名的新用户U2是否能成功?为什么?

        答:不能成功,报错如下图

          (2)刷新testlogin登录下的数据库,查看是否能访问studb数据库了。

            (3)在testlogin登录下,新建查询,运行命令:

            查看是否成功。

            答:不能成功,报错如图

              (4)切换到sa登录窗口中,选择当前数据库为“studb”,用命令为U1用户授权,授予U1用户查询图书表的权利,命令为:

              再回到testlogin的查询窗口中,重新运行上题的查询语句,看是否成功。

              答:能成功,运行结果如图

              (5)若要收回该权限可以用命令revoke select on S from U1。

              (三)管理角色

              1.角色分类为服务器角色和数据库角色、应用程序角色。分别查看系统预设的服务器角色和数据库角色有哪些。
              2.自定义角色
              (1)在studb数据库中创建一个自定义角色,名为testrole。展开目录树à“数据库”à“studb”à“安全性”à“角色”à“数据库角色”,右击新建数据库角色,填写角色名称为“testrole”,选择所有者为“U1”。
              (2)设置testrole对studb数据库中S,C,SC表的若干权限。

              右键点击testrole角色,选择属性,设置安全对象。

              点击“搜索”,选择添加对象为“特定对象”。

              选择安全对象类型为“表”。

              再点击“浏览”,选择选择该角色允许设置的S,C,SC表。

                      回到角色属性窗口,此时就能对允许访问的表设置具体数据库权限了,对C表授予“insert”“delete”“select”“update”权限,则在这些项目对应的复选框中打钩,这里还可以赋予授权权限和拒绝该权限。

                      这样就使得testrole角色具有对数据库中多个表的多项权限,那么把该角色授予给用户,就能一次给用户授予多项权限了。

              (3)在sa登录下,将testrole角色授予给testlogin登录名下映射到的studb数据库中的U1用户。即设置testlogin登录名的属性,对studb数据库勾选testrole角色。

                (4)在testlogin登录下,在查询编辑器中里窗体中运行查询C,SC表的命令,和对SC表进行删除的命令delete from SC where cno=’C1’。查看是否成功。

                答:成功如图

                3.为角色授予权限和收回权限的命令与对用户相同
                (1)收回testrole中对C表的删除的权限,命令为:

                REVOKE DELETE

                ON C

                FROM testrole;

                (2)要授予testrole角色能修改SC表score字段的权限,则命令为:

                GRANT UPDATE (score)

                ON SC

                TO testrole;

                、思考与练习

                1.登录、用户、角色的概念如何区分?三者在SQL Server中有何关系?

                答:

                登录(Login):登录是指用户通过用户名和密码等凭证来访问数据库服务器的过程。每个登录都有一个唯一的登录名,并且可以有一个或多个数据库用户与之关联。登录是在SQL Server级别管理的,用于控制用户对整个数据库服务器的访问权限。

                用户(User):用户是指在数据库中创建的一个实体,用于标识和管理数据库中的访问权限和资源。每个用户都有一个唯一的用户名,并且可以被分配给一个或多个角色。用户是在数据库级别管理的,用于控制用户对数据库中特定对象的访问权限。

                角色(Role):角色是一组权限和访问控制的集合,可以被分配给一个或多个用户。角色可以简化权限管理,通过将权限分配给角色,然后将角色分配给用户,可以实现对大量用户的权限管理。SQL Server提供了两种类型的角色:固定角色(如db_datareader、db_datawriter等)和用户定义角色(由用户自定义的角色)。

                关系:

                在SQL Server中,登录用于控制用户对整个数据库服务器的访问权限,用户用于控制用户对数据库中特定对象的访问权限,而角色用于管理和分配权限。登录可以创建用户,并将用户分配给角色。用户可以直接访问数据库中的对象,也可以通过分配角色来获得对对象的访问权限。

                1.用户自定义的角色是属于所有数据库的吗?是否能在每个数据库的安全性下角色中看到?

                答:

                用户自定义的角色是属于特定数据库的,而不是所有数据库。当你在一个数据库中创建一个用户定义的角色时,该角色只存在于该数据库中,并且只能在该数据库的安全性下角色中看到。

                每个数据库都有自己的一套角色,包括固定角色和用户定义角色。固定角色是在数据库创建时自动创建的,而用户定义角色是由用户根据需要创建的。你可以在每个数据库的安全性下的角色中看到该数据库中的所有角色,包括固定角色和用户定义角色。

                需要注意的是,用户定义的角色在一个数据库中是独立的,不能直接在其他数据库中使用。如果你需要在多个数据库中使用相同的角色,你需要在每个数据库中分别创建该角色,并将用户分配给这些角色。

                评论
                添加红包

                请填写红包祝福语或标题

                红包个数最小为10个

                红包金额最低5元

                当前余额3.43前往充值 >
                需支付:10.00
                成就一亿技术人!
                领取后你会自动成为博主和红包主的粉丝 规则
                hope_wisdom
                发出的红包

                打赏作者

                小李独爱秋

                你的鼓励将是我加更的最大动力

                ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
                扫码支付:¥1
                获取中
                扫码支付

                您的余额不足,请更换扫码支付或充值

                打赏作者

                实付
                使用余额支付
                点击重新获取
                扫码支付
                钱包余额 0

                抵扣说明:

                1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                余额充值