精华内容
下载资源
问答
  • 金仓数据库自主存取控制实验

    千次阅读 2020-04-09 14:28:46
    @[TOC]金仓数据库中的自主存取控制实验 自主存取控制实验 设有一个企业,包括采购、销售和客户管理等三个部门,采购部门经理David,采购员Jeffery;销售部门经理Tom,销售员Jane;客户管理部门经理Kathy,职员Mike。该...

    @[TOC]金仓数据库中的自主存取控制实验

    自主存取控制实验

    设有一个企业,包括采购、销售和客户管理等三个部门,采购部门经理David,采购员Jeffery;销售部门经理Tom,销售员Jane;客户管理部门经理Kathy,职员Mike。该企业一个信息系统覆盖采购、销售和客户管理等三个部门的业务,其数据库模式为TPC-H数据模式。针对此应用场景,使用自主存取控制机制设计一个具体的权限分配方案。

    实验过程

    1、 创建用户
    (1)为采购、销售和客户管理等三个部门经理创建用户标识,要求具有创建用户或角色的权利。语句为:
     create user david with createrole password ‘123456’;
     create user tom with createrole password ‘123456’;
     create user kathy with createrole password ‘123456’;
    (2)为采购、销售和客户管理等三个部门的职员创建用户标识和用户口令。语句为:
     create user jeffery with password ‘123456’;
     create user jane with password ‘123456’;
     create user mike with password ‘123456’;
    2、 创建角色并分配权限
    (1) 为各个部门分别创建一个查询角色,并分配相应的查询权限。
     create role PurchaseQueryRole;
     Grant Select on table part to PurchaseQueryRole;
     Grant Select on table supplier to PurchaseQueryRole;
     Grant Select on table partsupp to PurchaseQueryRole;

     create role SaleQueryRole;
     Grant Select on table Orders to SaleQueryRole;
     Grant Select on table lineitem to SaleQueryRole;

     create role CustomerQueryRole;
     Grant Select on table Customer to SaleQueryRole;
     Grant Select on table nation to SaleQueryRole;
     Grant Select on table region to SaleQueryRole;
    (2) 为各个部门分别创建一个职员角色,对本部门信息具有查看、插入权限。
     create role PurchaseEmployeeRole;
     Grant Select,insert on table part to PurchaseEmployeeRole;
     Grant Select,insert on table supplier to PurchaseEmployeeRole;
     Grant Select,insert on table partsupp to PurchaseEmployeeRole;

     create role SaleEmployeeRole;
     Grant Select,insert on table orders to SaleEmployeeRole;
     Grant Select,insert on table lineitem to SaleEmployeeRole;

     create role CustomerEmployeeRole;
     Grant Select,insert on table Customer to CustomerEmployeeRole;
     Grant Select,insert on table nation to CustomerEmployeeRole;
     Grant Select,insert on table region to CustomerEmployeeRole;
    (3) 为各部门创建一个经理角色,相应角色对本部门的信息具有完全控制权限,对其他的信息具有查询权。经理有权给本部门职员分配权限。
     create role PurchaseMangerRole with createrole;
     grant all on table part to PurchaseMangerRole;
     grant all on table supplier to PurchaseMangerRole;
     grant all on table partsupp to PurchaseMangerRole;
     grant SaleQueryRole to PurchaseMangerRole;
     grant CustomerQueryRole to PurchaseMangerRole;

     create role SaleMangerRole with createrole;
     grant all on table orders to SaleMangerRole;
     grant all on table lineitem to SaleMangerRole;
     grant PurchaseQueryRole to SaleMangerRole;
     grant CustomerQueryRole to SaleMangerRole;

     create role CustomerMangerRole with createrole;
     grant all on table Customer to CustomerMangerRole;
     grant all on table nation to CustomerMangerRole;
     grant all on table region to CustomerMangerRole;
     grant SaleQueryRole to CustomerMangerRole;
     grant PurchaseQueryRole to CustomerMangerRole;
    3、 给用户分配权限
    (1) 给各部门经理分配权限
     grant PurchaseMangerRole to david with admin option;
     grant SaleMangerRole to david with admin option;
     grant CustomerMangerRole to david with admin option;
    (2) 给各部门职员分配权限
     grant PurchaseEmployeeRole to jeffery;
     grant SaleEmployeeRole to jane;
     grant CustomerEmployeeRole to mike;
    4、 回收角色或用户权限
    (1) 收回客户经理角色的销售信息查看权限。
    Revoke SaleQueryRole from CustomerMangerRole;
    (2) 回收mike的客户部门职员权限
    Revoke CustomerEmployeeRole from mike;
    5、 验证权限分配正确性
    (1) 以david用户名登录数据库,验证采购部门经理的权限
     Select * from part;
     Select * from orders;
    (2) 回收mike的客户部门职员权限
     Select * from part;
     Select * from customer;

    实验结果分析

    通过本次实验,我学到了自主存取控制到底是什么。也了解到了with admin option、with check option、with grant option的区别和联系:
    (1) with admin option:意思是被授予该权限的用户有权将某个权限(如create any table)授予其他用户或角色,取消是不级联的。如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限。但管理员可以显式收回B create session的权限,即直接revoke create session from B。
    (2) with check option:在with check option的选项下,可以总结为
    update,要保证数据update之后能被视图查询出来,也就是要符合where的条件
    insert,保证insert的数据能被视图查询出来
    delete,有无 with check option都一样
    对于没有where字句的视图,使用with check option是多余的
    (3) with grant option权限赋予/取消是级联的,如将with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。
    使用角色进行权限分配的优缺点:
    (1) 优点:管理权限方便,可以根据实际情况具体地为一些角色分配相应地权利,具有良好地安全性
    (2) 缺点:操作繁琐。

    展开全文
  • 本次实验为自定任务,我选择了一个与自主存取控制有关的实验。 设有一个企业,包括采购、销售和客户管理等三个部门,采购部门经理David,采购员Fred;销售部门经理Tom,销售员Jerry;客户管理部门经理Kathy,职员...

    一、实验题目
    本次实验为自定任务,我选择了一个与自主存取控制有关的实验。
    设有一个企业,包括采购、销售和客户管理等三个部门,采购部门经理David,采购员Fred;销售部门经理Tom,销售员Jerry;客户管理部门经理Kathy,职员Ron。该企业一个信息系统覆盖采购、销售和客户管理等三个部门的业务。针对此应用场景,使用自主存取控制机制设计一个具体的权限分配方案。
    二、相关原理与知识
    (完成实验所用到的相关原理与知识)
    1.定义模式
    在SQL语句中模式定义语句如下:
    CREATE SCHEMA <模式名>AUTHORIZATION<用户名>;
    2.定义基本表
    CREATE TABLE<表名> (<列名><数据类型> [列级完整性约束条件]
    [,<列名><数据类型> [列级完整性约束条件]]

    [,<表级完整性约束条件>]);
    3.授予
    GRANT<权限>[,<权限>]…
    ON<对象类型><对象名>[,<对象类型><对象名>]…
    TO<用户>[,<用户>]…
    [WITH GRANT OPTION];
    4.收回
    REVOKE<权限>[,<权限>]…
    ON<对象类型><对象名>[,<对象类型><对象名>]…
    FROM<用户>[,<用户>]…
    [CASCADE|RESTRICT]
    5.创建数据库模式的权限
    CREATE USER
    6.创建角色
    CREATE ROLE <角色名>
    创建的角色是空的,需要给角色授权。
    GRANT<权限>[,<权限>]…
    ON<对象类型><对象名>[,<对象类型><对象名>]…
    TO<角色>[,<角色>]…
    三、实验过程
    (清晰展示实际操作过程,相关截图及解释)
    方案构想:
    由于题目没有具体给出要实现怎样的权限分配,所以我在这里发挥想象给个职位权限做一下安排。首先对于该系统用户可以简单分三类,客户、职员与经理。客户拥有与其相关部门的信息的查询权利,职员具有对所处部门信息的查询和插入权限,而经理拥有对本部门的所有权利和对其他部门的查询权限。我们可以看出经理的权限最大,包含职员和客户的权限,而职员的权限包含客户的权限。
    方案实现过程:
    1.建立以@@@命名模式;
    2.建立如下六个表:
    本次实验主要是练习自主存取控制,对于表没有太高要求,但是为了便于之后的实验,这里建立三组六个简易的表。
    采购部门:
    SUPPLIER表:SUPPLIER(Sname,Sprice),其中Sname为主码;
    MATERIALS表:MATERIALS(Mname,Mprice),其中Mname为主码;
    销售部门:
    MARKET表:MARKET(Mno,Mprice),其中Mno为主码;
    OEDERFORM表:OEDERFORM(Ono),其中Ono为主码;
    客户管理部门:
    CUSTOMER表:CUSTOMER(Cno,Cname),其中Cno为主码;
    NATION表:NATION(Nname),其中Nname为主码;
    建立模式和表后可以得到如下目录:
    在这里插入图片描述
    3.创建用户:
    (1)为各部门经理创建用户
    为采购、销售和客户管理等三个部门的经理David、Tom、Kathy创建用户标识,具有创建用户和角色的权利(WITH CREATEROLE),用户口令设为‘1234’。
    (2)为各部门职员创建用户
    为采购、销售和客户管理等三个部门的职员创建用户标识和用户口令为‘1234’。
    在这里插入图片描述
    在这里插入图片描述
    4.创建角色:
    (1)为各部门分别创建一个客户角色。
    为采购部门建立客户角色PCustomerRole,为销售部门建立客户角色SCustomerRole,为客户管理部门建立客户角色CCustomerRole。
    (2)为各部门分别创建一个职员角色
    为采购部门建立职员角色PEmployeeRole,为销售部门建立职员角色SEmployeeRole,为客户管理部门建立职员角色CEmployeeRole。
    (3)为各部门分别创建一个经理角色
    为采购部门建立经理角色PManagerRole,为销售部门建立经理角色SManagerRole,为客户管理部门建立经理角色CManagerRole。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5.给角色分配权限
    1)为客户角色分配权限
    客户对相关部门的信息具有查询权限,为各个部门的角色分配相应的权限。
    为这三个角色分配查询权限,采购部门的角色PCustomerRole只能够查询MATERIALS表和SUPPLIER表;销售部门的角色SCustomerRole只能够查询ORDERFORM表和MARKET表;客户管理部门的角色CCustomerRole只能够查询NATION表和CUSTOMER表。
    (2)为职员角色分配权限
    职员对本部门的信息具有查询和插入权限,为各个部门的角色分配相应的权限。
    为这三个角色分配查询和插入权限,采购部门的角色PEmployeeRole只能够对MATERIALS表和SUPPLIER表进行查询和插入;销售部门的角色SEmployeeRole只能够对ORDERFORM表和MARKET表进行查询和插入;客户管理部门的角色CEmployeeRole只能够对NATION表和CUSTOMER表进行查询和插入。
    在这里插入图片描述
    在这里插入图片描述
    (3)为经理角色分配权限
    经理对本部门的信息具有完全的控制权限,对其他部门的信息也具有查询权限。也就是说对于PManagerRole来说,他拥有对MATERIALS表和SUPPLIER表的所有操作的权限,同时还拥有ORDERFORM表、MARKET表、NATION表和CUSTOMER表的查询权限;同理,SManagerRole拥有对ORDERFORM表和MARKET表的所有权限同时他又有对MATERIALS表、SUPPLIER表、NATION表和CUSTOMER表的查询权限,CManagerRole拥有对NATION表和CUSTOMER表的所有权限,同时他拥有对ORDERFORM表、MARKET表、MATERIALS表和SUPPLIER表的查询权限。
    又因为各部门的客户角色拥有对各部门的查询权限,所以我们可以直接在将本部门所有权限赋予本部门的经理后,将其他部门的查询权以其他部门客户角色的形式赋给本部门的经理。
    6.给用户分配权限
    因为我们刚刚已经创建了角色并给角色分配了权限,所以此时只需把角色分配给相应的人员即可。这样,使权限与职位(角色)挂钩,便于在以后的人事调动对权限的调整。
    (1)给各部门经理分配权限
    (2)给各部门职员分配权限
    只需将职位角色授予对应的用户即可。
    7.收回用户或角色权限
    (1)收回客户管理部门职员Ron的职员权限
    这里我假设Ron请求辞退,由于Ron以后不再是客户管理部门的职员,所以我们需要将他的权限收回。
    这是收回用户权限。
    (2)收回采购部门经理查看销售部门信息的权限
    假设公司出台新规定,新规定的要求采购部门的经理不能查询销售部门的信息,此时我们需要把采购部门经理对销售部门信息的查询权限收回。
    这是收回角色权限。
    四、实验结果与分析
    本次实验实现了创建用户、创建角色、给角色授权、给用户授权和回收权限等与自主存取控制方法相关的练习。大多数数据库管理系统都支持自主存取控制,主要通过SQL语句的GRANT 和REVOKE语句来实现。创建不同的用户和不同的角色,通过给角色授权使其具有不同的权限,再将具有不同权限的角色授权给相应的用户,因此,不同的用户可以根据不同的实际需要拥有不同的权限,而且可以允许用户将拥有的权限转授给其他用户。这样,不同的数据库用户对不同的或相同的数据库对象可以有着不同的权限。
    数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。存取控制机制主要包括定义用户权限和合法权限检查两部分。
    在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将拥有的存取权限转授给其他用户。因此自主存取机制十分灵活。
    五、问题总结
    (记录所遇到的问题及解决方法)
    遇到问题:书上的例题中使用“with grant option”表示允许将此权限再授予其他用户,而我在学习过程中发现也有使用“with admin option”表示同一含义,那二者的区别是什么。
    解决办法:上网查阅with admin option与with grant option的区别。
    with admin option的意思是被授予该权限的用户有权将某个权限(如create any table)授予其他用户或角色,取消是不级联的。如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限。但管理员可以显式收回B create session的权限,即直接revoke create session from B.
    with grant option的意思是:权限赋予/取消是级联的,如将with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。
    六、源代码
    (源程序)
    建立模式:

    CREATE SCHEMA @@@
    

    建立表:

    SET search_path TO @@@;
    CREATE TABLE  CUSTOMER
    (Cno CHAR(9) PRIMARY KEY,
    Cname CHAR(20)); 
    
    SET search_path TO @@@;
    CREATE TABLE NATION
    (Nname CHAR(9) PRIMARY KEY);
    
    SET search_path TO @@@;
    CREATE TABLE SUPPLIER
    (Sname CHAR(9) PRIMARY KEY,
    Sprice CHAR(20));
    
    SET search_path TO @@@;
    CREATE TABLE MATERIALS
    (Mname CHAR(9) PRIMARY  KEY,
    Mprice  CHAR(20)); 
    
    SET search_path TO @@@;
    CREATE TABLE ORDERform
    (Ono CHAR(25) PRIMARY KEY); 
    
    SET search_path TO @@@;
    CREATE TABLE market
    (Mno CHAR(10) PRIMARY KEY,
     Mprice CHAR(25)); 
    

    创建用户:
    (1)部门经理

    CREATE USER David WITH CREATEROLE PASSWORD '1234';
    CREATE USER Tom WITH CREATEROLE PASSWORD '1234';
    CREATE USER Kathy WITH CREATEROLE PASSWORD '1234';
    

    (2)部门职员

    CREATE USER Fred WITH PASSWORD '1234';
    CREATE USER Jerry WITH PASSWORD '1234';
    CREATE USER Ron WITH PASSWORD '1234';
    

    创建角色:
    (1)客户角色

    CREATE ROLE PCustomerRole;
    CREATE ROLE SCustomerRole;
    CREATE ROLE CCustomerRole;
    

    (2)职员角色

    CREATE ROLE PEmployeeRole;
    CREATE ROLE SEmployeeRole;
    CREATE ROLE CEmployeeRole;
    

    (3)经理角色

    CREATE ROLE PManagerRole;
    CREATE ROLE SManagerRole;
    CREATE ROLE CManagerRole;
    

    为角色分配权限:
    (1)为各个部门相应的客户角色分配查询权限。

    GRANT SELECT ON TABLE MATERIALS TO PCustomerRole;
    GRANT SELECT ON TABLE SUPPLIER TO PCustomerRole;
    GRANT SELECT ON TABLE ORDERFORM TO SCustomerRole;
    GRANT SELECT ON TABLE MARKET TO SCustomerRole;
    GRANT SELECT ON TABLE NATION TO CCustomerRole;
    GRANT SELECT ON TABLE CUSTOMER TO CCustomerRole;
    

    (2)为各个部门职员角色分配查询和插入权限。

    GRANT SELECT,INSERT ON TABLE MATERIALS TO PEmployeeRole;
    GRANT SELECT,INSERT ON TABLE SUPPLIER TO PEmployeeRole;
    GRANT SELECT,INSERT ON TABLE ORDERFORM TO SEmployeeRole;
    GRANT SELECT,INSERT ON TABLE MARKET TO SEmployeeRole;
    GRANT SELECT,INSERT ON TABLE NATION TO CEmployeeRole;
    GRANT SELECT,INSERT ON TABLE CUSTOMER TO CEmployeeRole;
    

    (3)为各个部门经理角色分权限。

    GRANT ALL ON TABLE MATERIALS TO PManagerRole;
    GRANT ALL ON TABLE SUPPLIER TO PManagerRole;
    GRANT ALL ON TABLE ORDERFORM TO SManagerRole;
    GRANT ALL ON TABLE MARKET TO SManagerRole;
    GRANT ALL ON TABLE NATION TO CManagerRole;
    GRANT ALL ON TABLE CUSTOMER TO CManagerRole;
    GRANT PCustomerRole TO CManagerRole;
    GRANT SCustomerRole TO CManagerRole;
    GRANT SCustomerRole TO PManagerRole;
    GRANT CCustomerRole TO PManagerRole;
    GRANT PCustomerRole TO SManagerRole;
    GRANT CCustomerRole TO SManagerRole;
    

    给用户分配权限:
    (1)给部门经理分配权限

    GRANT PManagerRole TO David WITH ADMIN OPTION;
    GRANT SManagerRole TO Tom WITH ADMIN OPTION;
    GRANT CManagerRole TO Kathy WITH ADMIN OPTION; 
    

    (2)给职工分配权限

    GRANT PEmployeeRole TO Fred;
    GRANT SEmployeeRole TO Jerry;
    GRANT CEmployeeRole TO Ron;
    

    回收权限:
    (1)回收Ron的客户管理部门职员权限

    REVOKE SEmployeeRole FROM Ron; 
    

    (2)回收采购部门经理查看销售部门信息的权限

    REVOKE SCustomerRole FROM PManagerRole;
    
    展开全文
  • MYSQL学习与数据库综合实验(十)——自主存取控制实验(基于Ubuntu18.04中Docker安装的MySQL8实验) 12.1MySQL的权限 用户连接到MySQL,可以做各种查询,这都是MySQL用户与权限功能在背后维持着操作。 用户与...

    MYSQL学习与数据库综合实验(十二)——自主存取控制实验(基于Ubuntu18.04中Docker安装的MySQL8实验)

    12.1MySQL的权限

    用户连接到MySQL,可以做各种查询,这都是MySQL用户与权限功能在背后维持着操作。

    用户与数据库服务器交互数据,分为两个阶段:

    (1)你有没有权连接上来
    (2)你有没有权执行本操作

    12.1.1你有没有权连接上来

    服务器如何判断用户有没有权连接上来?

    依据:

    1)你从哪里来?host
    2)你是谁?user
    3)你的密码是多少?password

    用户的这三个信息,存储在mysql库中的user表中。

    修改host域,使IP可以连接

    mysql>``update` `user` `set` `host=``'192.168.137.123'` `where` `user` `= ``'root'``;``mysql>flush ``privileges``; ``--冲刷权限
    

    修改用户密码

    mysql>``update` `user` `set` `password``=``password``(``'11111111'``) ``where` `xxx;``mysql>flush ``privileges``; ``--冲刷权限
    

    12.1.2你有没有权执行本操作

    在mysql中,有一个库是mysql库,在这个库中有三个表,一个是user表,user表中存储了所有用户的权限信息。一个是db表,db表存储的是所有用户在数据库层的权限信息。一个是tables_priv表,tables_priv表存储的是所有用户在表层的权限信息。

    用户登录,user表首先能限制用户登录,其次还保存了该用户的全局权限,如果该用户没有任何权限,那么将从db表中查找该用户是否有某个数据库的操作权限,如果都没有,将从table_priv表中查找该用户是否有某个表的操作权限,如果有,则该用户可以按照已有的权限来操作该表。

    12.2创建MySQL的用户

    命令:

    CREATE USER 'username'@'host' IDENTIFIED BY 'password';
    

    说明:

    username:你将创建的用户名.

    host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%代替host。

    password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。

    关于创建用户时提示“Operation CREATE USER failed for XXX”的解决办法

    在这里插入图片描述

    出现该原因的结果有可能是你使用了

    delete  from  mysql.user  where user ='user_1';
    

    的语句删除用户,即使你刷新了 flush privileges;也没用。

    删除用户需要使用

    drop user   用户
    

    在这里插入图片描述

    然后重新进行创建就好了:

    create user 'user_1'@'%' identified by '123456';
    

    在这里插入图片描述

    12.3用户授权

    在这里插入图片描述

    12.3.1授权命令格式

    GRANT privileges ON databasename.tablename TO 'username'@'host';
    

    privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL;

    databasename:数据库名;

    tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*;

    例子:

    GRANT SELECT, INSERT ON test.user TO 'user_1'@'%';
    GRANT ALL ON *.* TO 'user_1'@'%';
    GRANT ALL ON maindataplus.* TO 'user_1'@'%';
    

    注意:

    用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:

    GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
    

    12.3.2使用REVOKE命令可以回收授予的权限,语法格式如下:

    REVOKE priv_type ON {表名|数据库名} FROM 用户;
    

    注:只有拥有当前数据库全局CREATE或者UPDATE权限的用户才能使用REVOKE命令。

    12.3.3全局授权和收回

    全局授权格式(使用通配符*):

    grant` `[权限1,权限2,权限3] ``on` `*.* ``to` `user``@``'host'` `identified ``by` `'password'
    

    常用权限:all、create、drop、select、insert、delete、update

    授权:

    创建lisi用户,host为192.168.191.%,%通配符表示192.168.191.xxx结尾的主机都可以连接,密码为12345678。

    grant` `all` `on` `*.* ``to` `lisi@``'192.168.191.%'` `identified ``by` `'12345678'``;
    

    收回权限:

    revoke` `all` `on` `*.* ``from` `lisi@``'192.168.191.%'``;
    

    12.3.4数据库级授权和收回

    需求:让lisi用户拥有mysqlmaster数据库的所有操作权限

    授权:

    grant` `all` `on` `mysqlmaster.* ``to` `lisi@``'192.168.191.%'` `identified ``by` `'12345678'``;
    

    收回:

    revoke` `all` `on` `mysqlmaster.* ``from` `lisi@``'192.168.191.%'``;
    

    12.3.5表级授权和收回

    需求:让lisi用户具有mysqlmaster数据库下的goods表的insert、update、select三个操作的权限。

    授权:

    grant` `insert``,``update``,``select` `on` `mysqlmaster.goods ``to` `lisi@``'192.168.191.%'` `identified ``by` `'12345678'``;
    

    收回:

    revoke` `insert``,``update``,``select` `on` `mysqlmaster.goods ``from` `lisi@``'192.168.191.%'``;
    

    12.4更新用户语法格式如下:

    12.4.1如果是修改当前登录用户密码语法:

    SET PASSWORD FOR 用户=PASSWORD(‘新密码’);
    

    12.4.2通过修改mysql数据库下的user表中的来修改(不可取)

    命令和update普通表一样,语法格式如下:

    UPDATE MYSQL.USER SET 属性名= 新属性值  WHERE  条件;
    

    比如,修改User的用户名为“user_1”将其用户名改为“user_3”,密码改为“1234”。

    注意:MySQL8之前修改密码是 set password= password(“新密码”);而MySQL8是 set authentication_string = “新密码”.也就是MySQL8的密码字段为authentication_string 。

    update mysql.user set user ="user_3" ,authentication_string ="1234" where user ="user_1";
    

    在这里插入图片描述

    可以发现如果直接使用 set authentication_string =‘新密码’,那么该密码直接被填充到用户中而没有经过加密。而我们知道,MySQL的密码是经过加密的,因此这样子使用update修改密码是有问题的,在你登录时候虽然用户名和密码都正确,但是却没法进行登录,会提示“ Access denied for user ‘user_3’@‘117.154.88.249’ (using password: YES)”。

    ​ MySQL8.0后请使用alter修改用户密码,因为在MySQL8.0以后的加密方式为caching_sha2_password,如果使用update修改密码会给user表中root用户的authentication_string字段下设置newpassowrd值,当再使用alter user ‘root’@‘localhost’ identified by 'newpassword’修改密码时会一直报错,必须清空后再修改(如果不首先清空这个authentication_string,在使用alter user 进行修改时会发生“Operation ALTER USER failed for XXX”的提示)
    在这里插入图片描述

    因为authentication_string字段下只能是MySQL加密后的43位字符串密码,其他的会报格式错误,所以在MySQL8.0以后能修改密码的方法只能是使用alter来修改:

    ALTER USER   用户   IDENTIFIED  WITH mysql_native_password BY '新密码';
    #或者是
    ALTER USER 用户 IDENTIFIED BY ‘新密码’;
    

    在这里插入图片描述

    比如:将用户 ‘user_1’@‘%’ 的密码改为“1234”

    ALTER USER ‘user_1’@‘%’ IDENTIFIED BY1234;
    #或者
    ALTER USER   ‘user_1’@‘%’    IDENTIFIED  WITH mysql_native_password BY '1234';
    

    最后刷新一定要刷新下

    flush privileges;
    

    12.5查询某个用户权限

    show grants for  用户;
    

    比如:

    show grants for 'user_1'@'%';
    

    在这里插入图片描述

    12.6删除用户

    12.6.1使用drop命令

    drop user 用户;
    

    比如:

    drop user  'user_1'@'%';
    

    在这里插入图片描述

    删除的是 用户 ‘user_1’@’%’。

    12.6.2使用delete命令

    delete from  mysql.user  where  条件
    

    比如:

    delete from  mysql.user where user='user_1' and host ='%';
    

    删除的是 用户 ‘user_1’@’%’。

    12.6.3使用drop和delete命令的区别

    12.6.3.1drop user 用户名;

    删除已经存在的用户,例如要删除‘user_1’这个用户,(drop user ‘user_1’;)默认删除的是user_1@”%”这个用户,如果还有其他用户,例如user_1@”localhost”,user_1@”ip”,则不会一起被删除。如果只存在一个用户’user_1’@”localhost”,使用语句(drop user ‘user_1’;)会报错,应该用(drop user ‘user_1’@”localhost”;)如果不能确定(用户名@机器名)中的机器名,可以在mysql中的user表中进行查找,user列对应的是用户名,host列对应的是机器名。

    12.6.3.5 delete from user where user=”用户名” and host=”localhost”;

    delete也是删除用户的方法,例如要删除’user_1’@”localhost”用户,则可以

    delete from user where user=”user_1” and host=”localhost”;
    

    drop删除掉的用户不仅将user表中的数据删除,还会删除诸如db和其他权限表的内容。而(delete from mysql.user)只是删除了mysql数据库中user表的内容,其他表不会被删除,后期如果命名一个和已删除用户相同的名字,权限就会被继承。

    12.7测试用例

    12.7.1.创建用户user_1和user_2,密码都为123456
     create user 'user_1'@'%' identified by "123456";
    create user 'user_2'@'%' identified by "123456";
    

    在这里插入图片描述

    12.7.2.将用户user_2的名称修改为user_3,并将其密码修改为1234

    在这里插入图片描述

    首先使用update mysql.user语句来更新user_2中的用户名

    update  mysql.user set user ='user_3' where  user ='user_2' and host='%';
    

    在这里插入图片描述

    然后使用alter命令修改密码:

    alter user 'user_3'@'%' identified with mysql_native_password by '1234';
    

    在这里插入图片描述
    这样就能完成将user_2表改为user_3表并且修改对应的的代码了。

    12.7.3.以user_1身份登陆数据库

    在这里插入图片描述

    从可以发现可以远程登录了。

    12.7.4.授予用户user_1对DBEM数据库中employee表的查询、插入、修改、删除等权限。
    grant insert,update,select,delete on dbms.employee to 'user_1'@'%';
    

    在这里插入图片描述

    在这里插入图片描述

    12.7.5.授予用户user_1对salary表的查询权限,并允许其将权限授予其他用户,然后用user_1登陆数据库并将salary表的查询权限授予user_3。

    首先给与user_1对salary表的查询权限并允许其将权限授予其他用户:

    grant select on dbms.salary to 'user_1'@'%' with grant option;
    

    在这里插入图片描述

    然后使用user_1的用户名和密码登录user_1进入数据库中,并将对salary表的查询权限给user_3:

    grant select on dbms.salary to 'user_3'@'%';
    
    

    在这里插入图片描述

    12.7.7.回收user_1的employee表上的select权
    revoke select on dbms.employee from 'user_1'@'%';
    

    在这里插入图片描述

    可以发现,user_1上的表的select权限已经被收回了。

    12.8整理笔记不易,如果有帮助到你,请给个一键三连。

    12.9详细的实验资料以及指导PPT请访问笔者GitHub地址:https://github.com/LJF2402901363/database_experiment.git

    12.10本博客已经同步到个人博客,如有需要请移步:http://moyisuiying.com/index.php/experiment/mysqlexperiment/441.html

    展开全文
  • 通过实验加深对数据库安全性的理解,熟悉视图机制在自主存取控制上的应用。 二、实验内容 1 1. 问题描述 2. 数据库设计 创建视图: Create view <视图名>[(<列名>[,<列名>]…)] As &...

    我从前最怕旁人火眼金睛,如今,倒是盼着有人能够洞幽烛远。如此,就能赠我一点欢喜。

    一、实验目的

             通过实验加深对数据库安全性的理解,熟悉视图机制在自主存取控制上的应用。

    二、实验内容 1

    1. 问题描述

    2. 数据库设计

    创建视图:

    Create view

    <视图名>[(<列名>[,<列名>]…)]

    As <子查询>

    [with check option]

    组成视图的属性名全部圣洛或全部指定

    授权(grant

    Grant <权限> [,<权限>…]

    [on <对象类型> <对象名>]

    To <用户>[,<用户>…]

    [with grant option]

    回收(revoke

    Revoke <权限> [,<权限>…]

    [on <对象类型> <对象名>]

    From <用户>[,<用户>…]

    角色创建

    Create role <角色名>

    给角色授权:

    Grant <权限> [,<权限>…]

    [on <对象类型> <对象名>]

    To <角色>[,<角色>…]

    角色权限收回:

    Revoke <权限> [,<权限>…]

    [on <对象类型> <对象名>]

    From <角色>[,<角色>…]

    3. 程序实现与测试

    (注意写程序的规范:标识符用法、一句一行、缩格排放、合理的注释等。)

    (1)代码及步骤如下:

    1)创建李勇用户

    --首先使用sp_addlogin添加登录

    --exec sp_addlogin '用户名','密码',默认数据库

    exec sp_addlogin '李勇','123456','school','English'

    --然后向该用户授予访问某数据库的权限

    go

    use school

    exec sp_grantdbaccess'李勇';

    2)在CHOICES表上创建CS_View视图

    go

    create view CS_View

    as

    select *

    from CHOICES

    where cid='10010';

    3)在视图CS_View上给用户李勇授予select的权限

    use School

    go

    grant select

    on CS_View

    to 李勇;

    4)将视图CS_Viewscore列的权限授予用户李勇

    use School

    go

    grant update(score)

    on CS_View

    to 李勇;

    5)以用户李勇登录,然后新建查询对CS_View进行查询

    use School

    go

    select *

    from CS_View;

    、、、

    (2)代码如下:

    use School

    go

    update CS_View

    set score=90

    where no=500024940

    select *

    from CS_View;

    三、实验内容 2

    1. 问题描述

    2. 数据库设计

    如实验内容1

    3. 程序实现与测试

    (1)代码及步骤如下:

    1)创建用户王二

    exec sp_addlogin '王二','654321'

    use School

    go

    exec sp_grantdbaccess'王二';

    2)创建视图,并将元组放入

    use School

    go

    create view grade2000

    as

    select *

    from STUDENTS

    where grade='2000'

    (2)代码如下

    use School

    go

    grant select

    on grade2000

    to 王二;

    展开全文
  • 自主存取控制可能存在数据的“无意泄露”,因这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记,故我们可以对系统控制下的所有主客体实施强制存取控制策略 强制存取控制作用: 1.保证更高...
  • 自主存取控制可能存在数据的“无意泄露”,因这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记,故我们可以对系统控制下的所有主客体实施强制存取控制策略 强制存取控制(MAC)作用: 1....
  • 目录 一、创建用户 二、修改用户密码 三、授予用户权限 四、收回用户授权 五、删除用户 六、完整方案验证 ...注:有关MySql数据库的其他操作请参见MySql目录进行查找。...例子:CREATE USER 'jdh'@'loc...
  • 实验2:Mysql—安全性语言

    千次阅读 2020-01-28 13:04:22
    自主存取控制实验为设计型实验项目,审计实验为验证型实验项目。 实验2.1 自主存取控制实验 1.实验目的 掌握自主存取控制权限的定义和维护方法。 2 .实验内容和要求 定义用户、角色,分配权限给用户、角色,回收权限...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 869
精华内容 347
关键字:

自主存取控制实验