如何通过视图机制与授权机制结合起来实现数据库的安全性

如何通过视图机制与授权机制结合起来实现数据库的安全性,第1张

数据设计的一个阶段,在数据库的概念设计过程中,先选择局部应用,获得一分e-r图;再进行视图设计,其主要有三种设计次序:

一、自顶向下。即从抽象级别高的且普遍的对象开始逐步细化、具体化与特殊化。

二、由底向上。即由具体的对象开始,普遍化与一般化,最后形成一个完整的视图设计。

三、由内向外。即从最基本的与最明显的对象入手,逐步扩充至非基本、不明显的其他对象。

SQL四种语言:DDL,DML,DCL,TCL

1DDL(DataDefinitionLanguage)数据库定义语言statementsareusedtodefinethedatabasestructureorschema

DDL是SQL语言的四大功能之一。

用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束

DDL不需要commit

CREATE

ALTER

DROP

TRUNCATE

COMMENT

RENAME

2DML(DataLanguage)数据 *** 纵语言statementsareusedformanagingdatawithinschemaobjects

由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的 *** 作。

DML分成交互型DML和嵌入型DML两类。

依据语言的级别,DML又可分成过程性DML和非过程性DML两种。

需要commit

SELECT

INSERT

UPDATE

DELETE

MERGE

CALL

EXPLAINPLAN

LOCKTABLE

3DCL(DataControlLanguage)数据库控制语言授权,角色控制等

GRANT授权

REVOKE取消授权

4TCL(TransactionControlLanguage)事务控制语言

SAVEPOINT设置保存点

ROLLBACK回滚

SETTRANSACTION

SQL主要分成四部分:

(1)数据定义。(SQLDDL)用于定义SQL模式、基本表、视图和索引的创建和撤消 *** 作。

(2)数据 *** 纵。(SQLDML)数据 *** 纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种 *** 作。

(3)数据控制。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。

(4)嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。

指定数据库,需要有所有表查询权限和视图创建权限

use [database]

Grant select to [userName]

GRANT CREATE VIEW TO [userName]

视图重建后不需要重新授权。视图是数据库中的一个查询方式,授权是指授予用户对数据库对象的访问权限。因此,当数据库管理员(DBA)重建视图时,只是修改了查询方式,对于已经授权的用户,他们仍然可以访问这个视图,而不需要重新授权。

use 数据库

go

--建立登录用户:用户名,密码,数据库

exec sp_addlogin 'bcuser','bcuser','数据库'

--创建角色golden

exec sp_addrole 'golden'

--授予角色golden 对数据库的select 权限

grant select to golden

--为bcuser 添加安全帐户

exec sp_grantdbaccess 'bcuser','u_bcuser'

--添加 u_sm角色golden 的成员

exec sp_addrolemember 'golden','u_bcuser'

go

们有这样一个需求:在数据库中建立两个用户,用户A 用于创建一些视图,直接访问自己数据库中一个模式下的表,以及通过数据库链路访问其他数据库中的表;另一个用户B 能访问到这个用户A 中的视图,并且只能访问视图,且访问连接数有限制。

这个用户B 是用来给其他系统访问的,因此对权限和资源使用都需要有限制条件。

这种需求在很多行业的应用中都很常见。假如这是一道面试题,您该如何去回答呢?

我采用下面的方法来回答这个问题。

第一步,创建新用户A 和B 。

这里用户名称分别为ryd_interface_src 和ryd_interface ,对这两个用户都授予非常有限的权限。

drop user ryd_interface_src cascade;

create user ryd_interface_src identified by ryd_interface_src;

grant connect,create view to ryd_interface_src;

drop user ryd_interface cascade;

create user ryd_interface identified by ryd_interface;

grant connect,create synonym to ryd_interface;

第二步,登录数据库一个模式中,授权给用户A ,使得用户A 能创建视图

conn qlzqclient/qlzqclient

grant select on INVEST_CLOCK to ryd_interface_src with grant option;

grant select on INVEST_LOG to ryd_interface_src with grant option;

这里授权方法加了一个with grant option ,请注意。

第三步,登录数据库用户A 中,创建视图

conn ryd_interface_src/ryd_interface_src

create or replace view run_views as

select id as doc_id, title,fbsj as upload_date,'' as branch_code from qlzqruns_lantern@CLIENT_QLZQWEB

where EXT1='1' and sysdate > START_TIME

and sysdate < SOLID_TIME

union

select adoc_id,atitle,aupload_date,abranch_code from qlzqcms_doc_single_attr@CLIENT_QLZQWEB a

left join qlzqcms_doc_category_map@CLIENT_QLZQWEB b on adoc_id=bdoc_id

where

astate =1 and ais_delete =0

and aupload_date> sysdate-90

and bcat_id=4;

create or replace view INVEST_CLOCK_VIEWS as

select from qlzqclientINVEST_CLOCK;

create or replace view INVEST_LOG_VIEWS as

select from qlzqclientINVEST_LOG;

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。

通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

视图的作用

简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的 *** 作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的 *** 作每次指定全部的条件。

安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

使用权限可被限制在基表的行的子集上。

使用权限可被限制在基表的列的子集上。

使用权限可被限制在基表的行和列的子集上。

使用权限可被限制在多个基表的连接所限定的行上。

使用权限可被限制在基表中的数据的统计汇总上。

使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。

二、视图的优点

(1)视图能简化用户的 *** 作

(2)视图机制可以使用户以不同的方式查询同一数据

(3)视图对数据库重构提供了一定程度的逻辑独立性

(4)视图可以对机密的数据提供安全保护

三、视图的安全性

视图的安全性可以防止未授权用户查看特定的行或列,是用户只能看到表中特定行的方法如下:

1 在表中增加一个标志用户名的列;

2 建立视图,是用户只能看到标有自己用户名的行;

3 把视图授权给其他用户。

四、逻辑数据独立性

视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

1 如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

2 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

3 如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

4 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。

五、视图的书写格式

CREATE VIEW <视图名>[(列名组)]

AS <子查询>

DROP VIEW <索引名>

注意:视图可以和基本表一样被查询,但是利用视图进行数据增,删,改 *** 作,会受到一定的限制。

(1)由两个以上的基本表导出的视图

(2)视图的字段来自字段表达式函数

(3)视图定义中有嵌套查询

(4)在一个不允许更新的视图上定义的视图

视图里边的表也是该用户下的,去掉表的授权,视图不受影响;如果里边的表是其它用户,需要 with grant option;

sqlplus / as sysdba

create table t1(f1 number);

create view v1 as select from t1;

create user cc identified by wcycc;

grant connect to cc;

grant select on v1 to cc;

conn cc/wcycc

select from sysv1;

以上就是关于如何通过视图机制与授权机制结合起来实现数据库的安全性全部的内容,包括:如何通过视图机制与授权机制结合起来实现数据库的安全性、数据库除了增删改查还有哪些 *** 作、在SQL2008中新建一个用户,为其指定数据库,需要有所有表查询权限和视图创建权限,应该怎么进行控等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9842909.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存