有关SQL中架构问题的探讨

时间:2023-04-25 14:54:04 公文范文 来源:网友投稿

摘要:常用数据库软件(如:Microsoft SQL Server 2005)中的数据存储,在大多数分布式Web应用程序中均扮演着重要的角色。这种数据存储可以包含所有类型的数据,包括用户应用程序首选项、机密的人事记录与医疗记录、审核日志与安全日志,甚至还包括用户访问应用程序时所需的凭据。显而易见,在存储这类数据以及对其执行读/写操作时都需要保证它们的安全,以确保只有具备相应授权权限的用户才能对其进行访问。SQL Server 2005中新增的架构功能使对用户的权限管理更回方便。

关键词:数据库;安全性;用户;架构

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)30-0517-02

The Exploration of SQL Schema Issues

FENG Yan1, ZHAO Ya-juan2

(1.Software School,Shangqiu Technological & Vocational College,Shangqiu 476000,China;2.Department of Electronic Information,Yongcheng Vocational College,Yongcheng 476600,China)

Abstract: The data of the daily database software (such as Microsoft SQL Server 2005) are stored, playing an important role in most distributed Web application program. This kind of data stores the data that can include all types, including user application program select for the first time, secret personnel record with medical records, check the daily record and daily record of the security, necessary evidence while even including users visit the application program. Obviously, carry out, read/write operate, needing security to guarantee them to it in the data of storing, So as to ensure only by possessing the corresponding users who authorize the authority can it interview it. The newly-increased framework function enables and goes back even more to users" authority management it convenient in SQL Server 2005.

Key words: database; security; users; framework

数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。系统安全保护措施是否有效是数据库系统的主要指标之一。数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。

Microsoft SQL Server关于安全架构方面从内到外可以用以下方式表示:

1) Windows用户:登陆到操作系统的用户账号。

2) Windows用户的SQL登陆 或 SQL专用用户登陆:从Windows登陆到SQLServer2005的账号。

3) 数据库用户:从服务器总台进入指定数据库的账号。

4) 角色:若干权限的集合,被数据库用户所分享。

5) 权限:分为数据库权限和表权限,能够对数据库或表执行具体操作。有登陆数据库、建立登陆、查询、添加、删除、修改等权限。

用图表方式表示如图1:

而在Microsoft SQL Server 2005中创建数据库用户时,必须给数据库用户指定一个“schema”,叫架构。架构是一个对象,参数名为“default_schema”,而该架构可以是暂时不存在的,只要在用该数据库账户登陆前创建就可以了。

问题是:架构究竟是什么?是角色和权限的若干组合吗,现具体介绍如下:

1 架构的定义

架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。例如,为了避免名称冲突,同一架构中不能有两个同名的表。两个表只有在位于不同的架构中时才可以同名。

2 缺省架构

在Microsoft SQL Server 2005 引入了缺省架构(Default Schema)的概念,用于确定没有使用完全限定名的对象的命名。缺省架构指定了服务器确定对象的名称时所查找的第一个架构。缺省架构可以用 CREATE USER 和 ALTER USER 中的 DEFAULT_SCHEMA 选项创建和修改。如果没有定义 DEFAULT_SCHEMA,则所创建的数据库用户将用 dbo 作为他的缺省架构。

3 Microsoft SQL Server 2000与Microsoft SQL Server 2005在架构问题上的区别

3.1 在 SQL Server 2000 中,数据库用户和架构是隐式连接在一起的

每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在功能上与包含它的架构所有者相同。因而,SQL Server 2000 中的完全限定名称的“架构”也是数据库中的用户。因此,从 SQL Server 2000 数据库中删除用户之前,管理员需要删除该用户所拥有的所有对象或更改这些对象的所有者

3.2 在 SQL Server 2005 ,架构独立于创建它们的数据库用户而存在

在SQL Server先前的版本中,架构的概念和一个特定的用户绑定。由一个用户创建的任何对象就由这个用户拥有。SQL Server实际上将一个数据库对象的两部分名称定义为ownername.objectname,而不是schemname.objectname。这里给出了一个CREATE SCHEMA DDL语句,但是没有命名自己架构的选项,只能命名它的拥有者,如下所示:

-- SQL Server 2000 create schema, no schema name

CREATE SCHEMA AUTHORIZATION fred

CREATE VIEW v1 as SELECT au_id, au_lname FROM authors

GRANT SELECT ON v1 to public

GO

-- SQL Server 2005 create schema with name

CREATE SCHEMA fredstuff AUTHORIZATION fred

SQL Server 2005之前的CREATE SCHEMA 语句确实是一种创建属于指定用户(比如fred)对象的简便方法,并通过一个单独的DDL语句批来授权。把数据库对象和特定的用户绑定在一起的问题是在删除用户时,数据库管理员不得不重新分配或删除这个用户的所有对象并重建它们。

SQL Server 2005引入了命名架构与用户分离的概念。使用新的CREATE USER DDL语句来创建一个用户时,可以给这个用户分配一个默认的架构。如果没有分配默认架构,则DBO(数据库拥有者)架构是默认的架构,如下所示:

-- user"s default schema is uschema

CREATE USER u1 FOR LOGIN u1 WITH DEFAULT_SCHEMA = "uschema"

go

-- user"s default schema is dbo

CREATE USER u2 FOR LOGIN u2

go

一个架构不仅能被一个特定用户(由一个SQL Server登录账户或Windows登录账户创建)拥有,而且也可以由一个数据库定义的数据库角色或应用程序角色拥有。新的CREATE APPLICATION ROLE DDL语句允许分配一个默认的架构,但是由于许多用户可以分配到一个角色(一个普通角色,而不是一个应用程序角色),因此CREATE ROLE不能为角色映射成用户的Windows组或映射成用户的对称和非对称密钥分配一个默认架构。注意,传统的存储过程sp_adduser和sp_addapprole已经改变了,这些存储过程首先创建一个和用户或应用角色名称相同的架构,然后调用相应的CREATE语句,指定这个架构为默认架构。优先使用新的CREATE语句,保留存储过程的行为仅仅是为了向后兼容。

如果架构的拥有者(一个单独的用户或多个用户)在对象上有CREATE权限,就可以在这个架构内创建数据库对象,并且还可以把架构级别的权限授给其他人。架构的拥有者必须被授予创建数据库对象的权限,但是授予的权限存放在一个数据库级别上,而不是在一个架构级别上。这里有一个用户的例子,这个用户有相关的架构,并且他还是这个架构的拥有者:

USE demo1

GO

CREATE LOGIN alogin1 WITH password = "password1",

DEFAULT_DATABASE = demo1

GO

-- default named schema

CREATE USER auser1 FOR LOGIN alogin1

WITH DEFAULT_SCHEMA = aschema1

GO

CREATE SCHEMA aschema1 AUTHORIZATION auser1

GRANT CREATE TABLE TO auser1

GO

EXECUTE AS USER="auser1"

GO

-- this works and creates aschema1.table1

CREATE TABLE table1 (theid INTEGER)

GO

在这个例子中,如果我们没有为用户auser1设置default_schema,则他的default_schema将是dbo。由于auser1不是dbo数据库角色的一个成员,因此,CREATE TABLE语句会失败。

3.3 使用架构的优势

将架构与数据库用户分离对管理员和开发人员而言有下列好处:

1) 多个用户可以通过角色成员身份或 Windows 组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。

2) 极大地简化了删除数据库用户的操作。

3) 删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。

4) 多个用户可以共享一个默认架构以进行统一名称解析。

5) 开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是 DBO 架构中。

4 Microsoft SQL Server 2005中对象的具体限定方法

用户始终拥有一个默认架构如果在创建用户时未指定默认架构,则默认架构为dbo。

该默认架构是服务器解析DML或DDL语句中指定的未限定的对象名称时搜索的架构。因此,当引用的对象包含在默认架构中时,不需要指定架构名。例如,如果table_name包含在默认架构中,则语句“SELECT * FROM table_name”可以成功执行。若要访问非默认架构中的对象,则必须至少指定一个由两部分构成的标识符(schema_name.object_name)。引用架构范围内的对象的所有DDL和DML语句都必须符合此要求。因此访问数据库对象的完全限定的对象名称现在包含四部分:server.database.schema.object。

参考文献:

[1] 胡百敬.SQL Server2005 T-SQL数据库设计[M].北京:电子工业出版社,2008.

[2] 布启敏,舒利文.SQL Server 2005开发者指南[M].北京:清华大学出版社,2007.

[3] Mary Pefinch.SQL数据库开发从入门到精通[M].北京:希望电子出版社,2001.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

推荐访问:架构 探讨 sql