第8章 SQL Server 安全管理

第8章  SQL Server 安全管理
第8章  SQL Server 安全管理

第8 章安全管理(4课时)

主要内容:

1 安全管理概述(身份验证模式、主体和安全对象)

2 登录名管理(创建、维护等)

3 数据库用户管理(创建、维护等)

4 架构管理(创建、修改和删除等)

5 角色管理(固定角色、用户定义的数据库角色、应用程序角色)

6 权限管理(权限类型、常用对象的权限、管理权限)

8.1 安全管理概述

本章主线

安全管理是数据库管理系统一个非常重要的组成部分,是数据库中数据被合理访问和修改的基本保证。SQL Server提供了非常完善的安全管理机制(身份验证机制[authentication]和访问许可机制[permission]),包括用户登录管理和用户使用数据库对象的管理。只有使用特定的身份验证方式的用户,才能登录到系统中。只有具有一定权限的用户,才能对数据库对象执行相应的操作。

当用户登录数据库系统时,应确保只有合法的用户才能登录到系统中,这是一个基本的安全问题。SQL Server 2008系统中,通过身份验证模式和主体解决这个问题。

8.1.1 身份验证模式

身份验证是确定客户端能否连接到SQL Server的验证方式,通过登录账号和密码来实现。从客户端看,登录到SQL Server 2008系统可以通过两种身份验证:

●Windows身份验证

●SQL Server身份验证

Windows身份验证。该方式使用Windows操作系统的安全机制验证身份,只要用户能够通过Windows用户账号验证,即可连接到SQL Server而不用再进行身份验证。Windows 身份验证方式是默认的身份验证方式,比SQL Server方式更安全。这种身份验证方式下的连接是信任连接。

Windows身份验证方式下的用户账户是Windows操作系统下的用户或组,是由Windows 维护的。当然Windows下的用户或组要成为SQL Server的登录账户必须经过映射。

SQL Server身份验证方式。该方式使用SQL Server系统的安全机制验证身份。当客户端连接到服务器时必须提供登录名和密码,此种连接称为非信认连接,用户登录账户是由SQL Server维护的。

身份验证模式是SQL Server 2008系统验证客户端的方式,从服务器端看,SQL Server 服务器身份验证模式有两种:

●Windows 身份验证模式

●SQL Server和Windows 身份验证模式

通过SQL Server Management Studio工具可以查看和设置连接的服务器身份验证模式(演示),当然设置完成后,要重新启动SQL Server才能生效。

8.1.2 主体和安全对象

在权限管理中首先要理解主体与安全对象的概念。

【主体、安全对象和权限,对应哪些人、哪些资源和哪些操作,三个对象可用一个造句连接:给予<主体>对于<安全对象>的<权限>】

主体是可以请求系统资源的个体、组和过程,是可以请求SQL Server 资源的实体。例如,数据库用户是一种主体,可以按照自己的权限在数据库中执行相应的操作。

SQL Server 2008系统有多种不同的主体,不同主体之间的关系是典型的层次结构关系,位于不同层次上的主体其在系统中影响的范围也不同。主体的影响范围取决于主体定义的范围(Windows、服务器或数据库)以及主体是单个的还是一个集合。每个主体都具有一个安全标识符(SID)。

SQL Server 2008系统中,可以把主体的层次分为3个级别:

●Windows级别

●SQL Server级别

●数据库级别

Windows级别的主体包括:

●Windows 域登录名

●Windows 本地登录名

SQL Server级别的主体包括:

●SQL Server登录名

数据库级别的主体包括:

●数据库用户

●数据库角色

●应用程序角色

安全对象是SQL Server 数据库引擎授权系统控制对其进行访问的资源。SQL Server系统通过验证主体是否已经获得适当的权限来控制主体对安全对象的各种操作。安全对象范围有服务器、数据库和架构。

服务器安全对象范围包括:

●端点

●SQL Server 登录账户

●数据库

数据库安全对象范围包括:

●用户

●角色

●应用程序角色●程序集

●消息类型

●路由

●服务●远程服务绑定●全文目录

●证书

●非对称密钥●对称密钥

●约定

●架构

架构安全对象范围包括:

● 类型

● XML 架构集合

● 对象(聚合、约束、函数、过程、队列、统计信息、同义词、表、视图等)

主体和安全对象之间是通过权限关联起来的。主体通过发出请求来访问系统资源(安全对象)。主体能否对安全对象执行访问操作,需要判断主体是否拥有访问安全对象的权限。

那么,数据库中的对象由谁所有?如果是由用户所有,当用户被删除时,其所拥有的对象怎么办?难道数据库对象可以成为没有所有者的“孤儿”吗?在SQL Server 2008系统中,这个问题是通过用户和架构分离来解决的,用户并不拥有数据库对象,架构拥有数据库对象,用户通过架构来使用数据库对象。数据库对象、架构和用户之间的关系示意图如下:

8.2 登录名管理

登录账户是基于服务器级使用的名称。登录名管理包括创建登录名、设置密码策略、查看登录名信息及修改登录名等。

sa 是一个默认的SQL Server 登录名,拥有操作SQL Server 系统的所有权限,该登录名不能被删除。

以”##”开头和结尾的用户是SQL Server 内部使用的账户,由证书创建,不应该被删除。

BUILDIN\Administrator 账户是与本地管理员组关联的登录名,默认属于sysadmin 角色。这个账户使得任何属于本地管理员的账户都可以获得对SQL Server 的完全控制权。

【无论是哪一种环境下安装SQL Server 2008,都会碰到为每个SQL Server 2008服务配置账户的问题。安装SQL Server 2008时会用的账户如下:

[1] 本地用户帐户

[2] 域用户帐户

[3] 内置系统帐户

● Network Service 帐户(网络服务)

● Local Service 帐户(本地服务)

● Local System 帐户(本地系统)

本地用户帐户。工作组环境,如果计算机不在域中,则建议使用不具有 Windows 管理员权限的本地用户帐户。

域用户帐户。如果服务必须与网络服务进行交互,则访问类似于文件共享的域资源;如果服务使用到运行 SQL Server 的其他计算机的链接服务器连接,则可以使用具有最低特权的域帐户。许多服务器到服务器的活动只能使用域用户帐户来执行。此帐户应由域管理员在域环境内预先创建。

Local Service 帐户。是一个内置帐户,与 Users 组的成员具有相同级别的资源和对象访问权限。请注意,SQL Server 或 SQL Server 代理服务不支持 Local Service 帐户。该帐户的实际名称为“NT AUTHORITY\LOCAL SERVICE ”。

Network Service 帐户。是一个内置帐户,比 Users 组的成员拥有更多的对资源和对象的访问权限。以 Network Service 帐户身份运行的服务将使用计算机帐户的凭据访问网络资源。该帐户的实际名称为“NT AUTHORITY\NETWORK SERVICE ”。

Local System 帐户。Local System 是一个具有高特权的内置帐户。

它对本地系统有许多

权限并作为网络上的计算机。该帐户的实际名称为“NT AUTHORITY\SYSTEM”。

8.2.1 创建登录名

创建登录名包括定义登录名名称,与之映射的Windows登录账户(Windows身份验证),登录口令,默认数据库等信息。

?映射Windows登录账户为SQL Server 登录账户

(1)映射Windows登录账户为SQL Server 登录账户

CREATE LOGIN login_name FROM WINDOWS,其中,登录名必须用方括号括起来,名称格式为:域名\计算机名\用户名或组名。

例:已经创建Windows用户bobbie,请创建登录名

if suser_ID('admi\bobbie')is not null

drop login[admi\bobbie]

go

create login[admi\bobbie]from windows

go

(2)创建SQL Server登录账户

CREATE LOGIN login_name WITH PASSWORD=’password’

例:创建名称为user01的SQL Server登录账户

if suser_ID('user01')is not null

drop login user01

go

create login user01with password='user123'

go

例:创建指定默认数据库的登录名

if suser_ID('user02')is not null

drop login user02

go

create login user02with

password='user02123',default_database=northwind

go

在Microsoft SQL Server 2008系统中,可以使用Master数据库用的系统视图sys.server_principals目录视图可以查看有关服务器级的主体信息,sys.sql_logins目录视图提供了SQL Server登录名信息。其中,S类型表示SQL Server登录名,U表示Windows登录名,G表示Windows组。

8.2.2 维护登录名

登录名创建之后,可以根据需要修改登录名的名称、密码、密码策略、默认的数据库等信息,可以禁用或启用该登录名,也可以删除不需要的登录名。

使用ALTER LOGIN语句用来修改登录名的属性信息。【修改登录名与删除再重建该登录名是不同的,修改登录名时修改前后登录名的SID是不变的】,也可以禁用或启用指定的

登录名。

例:修改登录名的名称

ALTER LOGIN user01WITH name=suser01

例:修改登录名的密码

ALTER LOGIN suser01WITH PASSWORD='suser01123'

例:禁用登录名suser01登录

ALTER LOGIN suser01DISABLE

例:启用登录名suser01登录

ALTER LOGIN suser01ENABLE

如果某个登录名不再需要了,可以使用DROP LOGIN语句删除该登录名

8.3 数据库用户管理

数据库用户是数据库级的主体,是登录名在数据库中的映射,是在数据库中执行操作和活动的行动者。

在Microsoft SQL Server 2008系统中,数据库用户不能直接拥有表、视图等数据库对象,而是通过架构拥有这些对象。

数据库用户管理包括创建数据库用户、查看数据库用户信息、修改数据库用户、删除数据库用户等操作。

8.3.1 创建数据库用户

可以使用CREATE USER语句在指定的数据库中创建用户。

例:在mydb数据库中创建与suser01登录名相对应的数据库用户user01。

use mydb

go

if user_id('user01')is not null

drop user user01

go

create user user01from login suser01

go

用户名和登录名既可以相同,也可以不相同。数据库中的每一个用户都可以对应多个架构,但是只能对应一个默认架构。这里没有明确指定该用户拥有的默认架构,user01用户拥有的默认架构是dbo【dbo是一个系统自动生成的架构,可以拥有数据库中的所有对象】。例:创建具有指定架构的数据库用户。

use mydb

go

if user_id('user02')is not null

drop user user02

go

create user user02from login[ADMI\bobbie]with default_schema=mysc go

在创建数据库用户时可以引用当前不存在的架构,即可以在创建用户之后再创建指定的架构。

可以在相应数据库的安全性结点中查看到所有数据库用户,也可以使用

dbo数据库用户。dbo数据库用户是数据库中默认用户,是系统自动生成的。dbo用户拥有在数据库中操作的所有权限。默认情况下,SA登录名在各数据库中对应的用户就是dbo 用户。用户不能删除dbo用户。该用户的默认架构是dbo架构。

guest数据库用户。guest数据库用户是数据库中的一个默认的用户,也是系统自动生成的。授予guest 用户的权限由在数据库中没有用户账户的用户继承。不能删除guest 用户,但可通过撤消该用户的CONNECT 权限将其禁用【在master 或tempdb 以外的任何数据库中执行REVOKE CONNECT FROM GUEST 来撤消CONNECT 权限】。该用户的默认架构是guest架构。

8.3.2 维护数据库用户

数据库用户建立之后,可根据需要修改用户名;可以修改用户的默认架构;可以修改数据库用户对应的登录名映射;也可以删除数据库用户。

可以使用ALTER USER语句修改数据库用户。

例:将mydb数据库中的user01数据库用户更名为myuser01。

use mydb

go

if user_id('user01')is not null

alter user user01with name=myuser01

go

例:将mydb数据库中的myuser01数据库用户的默认架构更改为sc01。

use mydb

go

if user_id('myuser01')is not null

alter user myuser01with default_schema=sc01

go

例:将mydb数据库中的myuser01数据库用户对应的登录名修改为user02。

USE mydb

go

if USER_ID('myuser01')is not null

ALTER USER myuser01WITH LOGIN=user02

go

如果用户不需要了,可以使用DROP USER语句删除数据库用户。但要注意,不能从数据库中删除拥有架构的数据库用户。必须先删除或转移拥有的架构,才能删除数据库用户。

8.4 架构管理

架构是形成单个命名空间的数据库实体的集合。架构是数据库级的安全对象,也是Microsoft SQL Server 2008系统强调的特点,是数据库对象的容器,是分离数据库用户和安全对象的有效方法。

SQL Server 内置了十二个预定义的架构,它们与内置数据库用户和角色具有相同的名称。这些架构主要用于向后兼容性。如果不需要与固定数据库角色具有相同名称的架构,则可以删除它们。但不能删除下列架构:

●dbo

●guest

●sys

●INFORMA TION_SCHEMA

dbo架构是新创建的数据库用户的默认架构。dbo架构由dbo用户账户拥有。

guest架构是guest用户的默认架构。

sys 和INFORMA TION_SCHEMA 架构是为系统对象而保留的。不能在这些架构中创建对象,也不能删除它们。

管理架构包括创建架构、查看架构的信息、修改架构及删除架构等。

8.4.1 创建架构

创建架构包括定义架构名称,定义架构的所有者(数据库用户),另外在定义架构的同时,也可以定义该架构所拥有的表、视图,同时也可授予权限。

使用CREATE SCHEMA语句不仅可以创建架构,同时还可以创建该架构所有的表、视图并且可以对这些对象设置权限。

例:定义名称为mysc的架构

use mydb

go

if schema_id('mysc')is not null

drop schema mysc

go

create schema mysc

go

例:定义架构的同时明确指定所有者

use mydb

go

if schema_id('mysc01')is not null

drop schema mysc01

go

create schema mysc01authorization myuser01

go

需要指出的是,数据库用户的默认架构与架构的所有者是不同的。一个数据库用户可以拥有多个架构,但某一时刻只能有一个默认架构。

例:创建架构时,同时创建该架构所拥有的数据库对象并将SELECT权限授予guest用户。use mydb

go

if schema_id ('mysc02')is not null

drop schema mysc02 go

create schema mysc02 authorization myuser01

create table mytable ( empid int primary key ,

empname varchar (20)

)

grant SELECT to guest

go 如果要查看数据库中的架构信息,可以使用sys.schemas 架构目录视图。

8.4.2 修改和删除架构

修改架构是指将架构中的对象转移到其他架构中。ALTER SCHEMA 语句完成对架构的修改。另外还可以修改架构的所有者。

例:将dbo 架构拥有的mystudent 表转移到mysc02架构中。

use mydb

go

if SCHEMA_ID ('mysc02')is not null

alter schema mysc02 transfer dbo .mystudent

go 需要注意的是,由于对象的权限是与所属的架构紧密关联的,当将对象转移到新架构时,与该对象关联的所有权限都被删除。

例:将架构mysc 的所有者更改为数据库用户myuser01。

ALTER AUTHORIZATION ON schema ::mysc to myuser01

如果架构已经没有存在的必要了,可以使用DROP SCHEMA 语句删除架构。删除架构时需要注意,如果架构中包含有任何对象,那么删除操作将失败。只有架构中不再包含有对象时,才可以被删除。

8.5 角色管理

在SQL Server 中,角色是为了方便权限管理而设置的管理单位,它将数据库中的不同用户集中到不同单元(角色)中,并以单元为单位进行权限管理,该单元的所有用户都具有该权限,即角色的成员继承了角色的权限,大大减少了管理员的工作量。SQL Server 角色类型如下图所示:

8.5.1 SQL Server 的固定角色

服务器级

固定服务器角色 固定数据库角色 用户定义数据库角色

应用程序角色

固定服务器角色是服务器级别的主体,独立于各个数据库,作用范围是整个服务器。固定服务器角色具有固定的权限,不能被修改。可以在这些角色中添加登录名以获得相关的权限。下表列出了固定服务器角色名称及权限。

在SQL Server系统中,可以把登录名添加到固定服务器角色中,使登录名作为固定服务器角色的成员,从而继承固定服务器角色的权限。

可以使用sp_addsrvrolemember存储过程向固定服务器角色中添加成员,使用sp_dropsrvrolemember存储过程删除固定服务器角色成员,使用is_srvrolemember函数判断指定的登录名是否为某个固定服务器角色的成员,使用sp_helpsrvrolemember存储过程查看固定服务器角色的成员。

固定数据库角色是数据库级别的主体,作用范围是整个数据库。固定数据库角色具有固定的权限,不能被修改。可以在这些角色中添加数据库用户以获得相关的权限。SQL Server 中的每一个数据库中都有一组固定数据库角色,从而很容易实现数据库用户的权限管理。下表列出了固定数据库角色名称及权限。

其中,public角色是一个特殊的角色,有两大特点,一是初始状态是没有权限;二是所有的数据库用户都是它的成员。可以为该角色授予权限,所有数据库用户都会继承这些权限,从某种程度上可以这样说,为public角色授予权限时,实际上就是为所有数据库用户在授予权限。

在SQL Server系统中,可以把数据库用户添加到固定数据库角色中,使数据库用户作为固定数据库角色的成员,从而继承固定数据库角色的权限。

可以使用sp_addrolemember存储过程向固定数据库角色中添加成员,使用sp_droprolemember存储过程删除固定数据库角色成员,使用sp_helprolemember存储过程查看固定数据库角色的成员。

8.5.2 SQL Server的用户自定义数据库角色

用户可以根据应用需要定义数据库角色来管理数据库用户的权限。包括创建数据库角色、添加和删除数据库角色成员、查看数据库角色信息及修改和删除角色等。

创建角色的过程就是指定角色名称和拥有该角色的用户的过程。如果没有指定角色的所有者,那么当前操作的用户默认是该角色的所有者,可以使用AUTHORIZATION关键字明确指定所有者。

例:创建名为myrole01的数据库角色。

use mydb

go

if EXISTS(SELECT*FROM sys.database_principals WHERE name='myrole01' AND type='R')

drop role myrole01

go

create role myrole01

go

没有明确指定角色的所有者,当前执行create role语句操作的用户是默认的所有者。例:创建名为myrole02的数据库角色,其所有者是myuser01。

use mydb

go

if EXISTS(SELECT*FROM sys.database_principals WHERE name='myrole02' AND type='R')

drop role myrole02

go

create role myrole02authorization myuser01

go

可以使用sp_addrolemember存储过程向固定数据库角色中添加成员,使用sp_droprolemember存储过程删除固定数据库角色成员,使用sp_helprolemember存储过程查看角色的成员。

例:将myuser01数据库用户添加到角色myrole02中。

execute sp_addrolemember'myrole02','myuser01'

execute sp_helprolemember'myrole02'

例:将myuser01数据库用户从角色myrole02中删除。

execute sp_droprolemember'myrole02','myuser01'

execute sp_helprolemember'myrole02'

可以使用sys.database_principals安全目录查看当前数据库中所有数据库角色信息。使用sys.database_role_members安全目录视图查看当前数据库中所有数据库角色ID和其成员ID 信息。

如果要修改角色名称,可以使用ALTER ROLE语句。可以使用DROP ROLE语句删除指定的角色。

8.5.3 SQL Server的应用程序角色

应用程序角色是一个数据库主体,它使应用程序能够用其自身的、类似用户的权限来运行。使用应用程序角色,可以只允许通过特定应用程序连接的用户访问特定数据,如果不使用这些特定的应用程序连接,就无法访问这些数据。

与数据库角色相比来说,应用程序角色有3个特点:

●在默认情况下不包含任何成员;

●在默认情况下该角色是非活动的,必须激活之后才能发挥作用;

●该角色有密码,只有拥有应用程序角色正确密码的用户才可以激活该角色。当激活

某个应用程序角色之后,用户会失去自己原有的权限,转而拥有应用程序角色的权

限。

那么该如何使用应用程序角色呢?应用程序角色的意义在于其权限的变换。使用应用程序角色的过程包括下列步骤:

[1] 创建应用程序角色;

[2] 对该应用程序角色分配权限;

[3] 执行客户端应用程序;

[4] 客户端应用程序作为用户连接到SQL Server;

[5] 然后应用程序用一个只有它才知道的密码执行sp_setapprole 存储过程;

[6] 如果应用程序角色名称和密码都有效,则激活应用程序角色。此时,连接将失去用户权限,而获得应用程序角色权限,这些权限在连接期间始终有效。

在SQL Server系统中,可以使用CREATE APPLICATION ROLE语句创建应用程序角色。该语句的语法形式如下:

CREATE APPLICATION ROLE application_role_name

WITH PASSWORD=’password’ ,

DEFAULT_SCHEMA=schema_name

例:在mydb数据库中创建一个名为myapprole的应用程序角色。

use mydb

go

create application role myapprole

with password='myapprole123',

default_schema=mysc

go

在默认状态下,新建的应用程序角色是非活动的,只有激活后才能发挥作用。使用sp_setapprole存储过程激活应用程序角色。

应用程序角色激活之后一直处于活动状态,直到该连接断开或执行了sp_unsetapprole 存储过程为止。

例:激活数据库mydb中的应用程序角色myapprole。

use mydb

go

sp_setapprole'myapprole','myapprole123'

go

**例:使用密码’myapprole123’激活myapprole应用程序角色并创建一个cookie。该示例返回当前用户的名称,然后通过执行sp_unsetapprole 恢复到原始上下文中并且返回用户名称。use mydb

go

declare@cookie varbinary(8000)

execute sp_setapprole

'myapprole','myapprole123',@fcreatecookie=true,@cookie=@cookie output select USER_NAME()

execute sp_unsetapprole@cookie

select USER_NAME()

go

对于应用程序角色,可以使用ALTER APPLICATION ROLE 语句修改应用程序角色的名称、密码和默认架构。可以使用DROP APPLICATION ROLE语句删除该角色。

8.6 权限管理

权限是执行操作、访问数据的通行证。只有拥有了针对某种安全对象的指定权限,才能对该对象执行相应的操作。可以对不同的主体对象设置不同的权限,从而赋予或限制它们访问数据的能力

8.6.1 权限的类型(从权限的角度看待对象)

在SQL Server系统中,不同的分类方式可以把权限分成不同的类型。如果按照权限是否与特定的对象有关,可以把权限分为针对所有对象的权限和针对特殊对象的权限。

针对所有对象的权限表示这种权限可以针对SQL Server系统中所有的对象。下表列出了常用的针对所有对象的权限及其描述。

针对特殊对象的权限是指某些权限只能在指定的对象上起作用。下表列出了常用的针对特殊对象的权限及其描述。

8.6.2 常用对象的权限(从对象角度来看待权限)

安全对象的常用权限如下表所示。

8.6.3 管理权限

SQL Server的权限管理包括授予权限、收回权限和否认权限。权限管理可以通过SQL Server Management Studio工具实现,也可以通过命令来实现,这里只介绍通过命令实现权限管理。

在SQL Server 2008系统中,可以使用GRANT语句将安全对象的权限授予指定的安全主体。这些可以使用GRANT语句授权的安全对象包括应用程序角色、程序集、非对称密钥、证书、约定、数据库、端点、全文目录、函数、消息类型、对象、队列、角色、路由、架构、服务器、服务、存储过程、对称密钥、系统对象、表、类型、用户、视图和XML架构集合等。

GRANT语句的语法是比较复杂的,不同的安全对象有不同的权限,因此也有不同的授权方式。下面是GRANT语句的简单语法。

GRANT { ALL [ PRIVILEGES ] }

| permission [ ( column [ ,...n ] ) ] [ ,...n ]

[ ON [ class :: ] securable ] TO principal [ ,...n ]

[ WITH GRANT OPTION ] [ AS principal ]

可以这样理解,GRANT <某个权限> ON <某个对象> TO <某个用户、登录名或组>。例:授予数据库用户myuser查询表mytable的权限。

use mydb

grant select on mysc.mytable to myuser

例:授予数据库用户myuser的create table权限。

use mydb

grant create table to myuser

例:授予数据库用户myuser关于表mytable的insert权限,并允许该用户将这个权限转授给其它用户。

use mydb

grant select on mysc.mytable to myuser with grant option

例:授予数据库用户查询表中指定列的权限。

use mydb

grant select on mysc.student(xh,xm)to myuser

如果希望从某个安全主体处收回权限,可以使用REVOKE语句。REVOKE语句是与GRANT语句相对应的,可以把通过GRANT语句授予给安全主体的权限收回。也就是说,使用REVOKE语句可以删除通过GRANT语句授予给安全主体的权限。

REVOKE语句的简单语法如下:

REVOKE [ GRANT OPTION FOR ]

{

[ ALL [ PRIVILEGES ] ]

|

permission [ ( column [ ,...n ] ) ] [ ,...n ]

}

[ ON [ class :: ] securable ]

{ TO | FROM } principal [ ,...n ]

[ CASCADE] [ AS principal ]

可以这样理解,REVOKE <某个权限> ON <某个对象> FROM <某个用户、登录名或组>。例:将数据库用户myuser查询mytable_sa_1的权限收回。

必需是授权者或系统管理员来收回相应权限。

revoke select on dbo.mytable_sa_1from myuser

例:将数据库用户的create table权限收回。

revoke create table from myuser

例:收回数据库用户myuser关于表mytable的insert权限(允许该用户将这个权限转授给其它用户)。

revoke insert on mytable from myuser cascade

例:收回数据库用户查询表中指定列的权限。

revoke select on dbo.mytable_sa_2(id,name)from myuser

安全主体可以通过两种方式获得权限,第一种方式是直接使用GRANT语句为其授予权限,第二种方式是通过作为角色成员继承角色的权限。

使用REVOKE语句只能删除安全主体通过第一种方式得到的权限,要想彻底删除安全主体的特定权限必须使用DENY语句。

DENY语句的语法形式与REVOKE语句非常类似。

例:

DENY SELECT ON dbo.mytable(ID,name)TO myuser

该DENY语句成功地从myuser用户处删除了针对mytable表中ID和Name两列的SELECT权限,而且禁止该用户通过作为其他角色成员获得针对这两列的SELECT权限。

当某个安全主体针对某个安全对象的指定权限处于否认状态时,可以使用REVOKE语句收回这种状态,使得该安全主体针对该安全对象的指定权限处于自然状态。

例:

revoke SELECT ON dbo.mytable(ID,name)from myuser

2.1 XXX

2.1 XXX

SQLServer和Oracle语法的差异

SQLServer和Oracle是大家经常用到的数据库,在此总结出这些常用函数以供大家参考。 数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16 10.取平方根 S:select SQRT(4) value 2 O:select SQRT(4) value from dual 2 11.求任意数为底的幂

SQLSERVER和MYSQL语法和关键字的区别详解

SQL Server和MySql语法和关键字的区别 ——用于SQLServer到MySql的转换 对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。 ◆根本的区别是它们遵循的基本原则 二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM,Heap,InnoDB,and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。 ◆发行费用:MySQL不全是免费,但很便宜 当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。 ◆性能:先进的MySQL 纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式 MyISAM。MyISAM数据库与磁盘非常地兼容而不占用过多的CPU和内存。 MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX 系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。 因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL作为后台数据库。 当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。 ◆安全功能

SQLServer常用关键字数据类型和常用语法

SQL Server 2008 常用关键字、数据类型和常用语法 常用关键字: SQL server 2008一共大约有180多个关键字。简要分为主要关键字、辅助关键字和函数类关键字。本文就常用的这三类关键字进行语法说明和用例。 说明:1、比较好的习惯是,数据库名以D_开头,表名用T_开头,字段名以F_开头,这样可以防止和关键字重名。 2、如果确实用到了系统关键字,就要在关键上加[]方括号,以与关键字进行区别。例如有一个用户表被命名为USER,则查询该表内容的时候:SELECT * FROM USER语句是错误的,应该是SELECT * FROM [USER]。因为USER是关键字。

数据类型: SQL Server 2008一共有36种数据类型。具体如下:

常用语法: 一、数据库 【创建数据库】 CREATE DATABASE 【修改数据库】 ALTER DATABASE 【删除数据库】 DROP DATABASE 二、表结构 【创建数据表】 1、设定字段是允许空,非空、标识列,自增和主键约束。 CREATE TABLE T_CUSTOMER--表名 (CUSTOMERID INT IDENTITY(1,1),--客户ID,标识列,从开始,每次自增 COMPANYNAME NVARCHAR(50)NOT NULL,--,如果不显示指明NOT NULL,系统默认是允许空的USERNAME NVARCHAR(10)NOT NULL,--联系人姓名,非空 PHONENUMBER CHAR(11)NULL,--联系电话,允许为空 CONSTRAINT T_CUSTOMER_PrimaryKey PRIMARY KEY (CUSTOMERID))--设定USERID为主键,用括号括起来 /*每个单词之间是空格隔开,每个字段之间用单引号隔开,整个字段定义部分用括号括起来*/ /*T_RegUser_PrimaryKey是约束名*/ 2、设定字段是UNIQUEIDENTIFIER数据类型,唯一性约束,CHECK约束和默认值约束。

sqlserver日期函数

sqlserver日期函数 SQLServer时间日期函数详解,SQLServer,时间日期, 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:0 0.000 3. datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回:17 select datediff(day,'2004-09-18','2004-09-01') --返回:-17 4. datepart 返回代表指定日期的指定日期部分的整数。 SELECT DATEPART(month, '2004-10-15') --返回10 5. datename 返回代表指定日期的指定日期部分的字符串 SELECT datename(weekday, '2004-10-15') --返回:星期五 6. day(), month(),year() --可以与datepart对照一下 select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114) select datename(dw,'2004-10-15') select 本年第多少周=datename(week,'2004-10-15') ,今天是周几=datename(weekday,'2004-10-15') 函数参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 参数interval的设定值如下: 值缩写(Sql Server)(Access 和ASP) 说明 Year Yy yyyy 年1753 ~ 9999 Quarter Qq q 季1 ~ 4 Month Mm m 月1 ~ 12

SQLServer数据库安全配置规范

SQLServer数据库安全配置规范

1.概述 1.1. 目的 本规范明确了SQL Server数据库安全配置方面的基本要求。为了提高SQL Server数据库的安全性而提出的。 1.2. 范围 本规范适用于XXXX使用的SQL Server数据库版本。

2.配置标准 2.1. 补丁 2.1.1.安装数据库最新补丁 【目的和操作】连接微软SQLServer网站,获得各个最新的补丁包和补丁集合。 2.2. 网络配置 2.2.1.隐藏服务器 【目的和操作】在企业管理器中选择数据库服务器的属性,网络配置,TCP/IP 属性,选中其中的“隐藏服务器”选项。 该操作可以通过设置IPSE策略过滤UDP1434端口完成。 2.2.2.去掉不必要的协议 【目的和操作】默认情况下,SQLSERVER同时安装TCP/IP和管道,在企业管理器中选择数据库服务器的属性,网络配置,删除管道。 【影响】首先确认用户或者应用程序不使用管道来通讯。只使用Windows进行身份验证并需要远程维护必须使用管道。 2.2. 3.改变默认通信端口 【目的和操作】在企业管理器中选择数据库服务器的属性,网络配置,TCP/IP 属性,默认情况下是TCP 1433端口,请修改该端口为新的端口。 再使用Windows的IPSEC安全策略,禁止非允许的IP地址访问此端口。 【影响】影响使用默认端口的远程访问,要求用户先确认不影响其他操作。

2.2.4.使用通讯协议加密 【目的和操作】使用SSL加密协议。 【影响】影响使用默认端口的远程访问,要求用户先确认不影响其他操作。2.2.5.网络连接访问控制 【目的】在操作系统或者相应的网络设备上设置网络访问控制 【具体配置】 1、禁止非数据库应用系统IP连接UDP1434、TCP1433(或者修改后的通 讯端口)的连接 2、禁止非数据库应用系统IP连接TCP445/139端口的连接。 【影响】根据需要选择。会影响普通的数据库连接。 2.3. 审核设置 2.3.1.设置审核级别 【目的】设置SQL Server的审核选项。 【具体配置】 展开一个服务器组。右击一个服务器,再单击"属性"。在"安全性"选项卡 的"身份验证"下,在"审核级别"中选择在 SQL Server 错误日志中记录的用 户访问 Microsoft? SQL Server?的级别:"全部"表示审核成功的和失败的 登录尝试。 2.3.2.设置日志目录权限 【目的】限制日志目录的权限,防止对日志目录的非授权访问。 【具体配置】 日志通常保留在:SQL Server安装目录\MSSQL\LOG\ 设置目录权限为:administrator, system(完全控制),如果有服务账号, 也加上服务账号的权限。 【影响】 如果SQL Server服务不是以localsystem而是以其他账号运行,那么也设置 该账号有完全控制的权限

(完整版)SQLServer存储过程的基本概念以及语法汇总

SQL Server存储过程的基本概念以及语法【转】 存储过程的概念 SQL Server提供了一种方法,它可以将一些固定的操作集中起来由SQL Server 数据库服务器来完成,以实现某个任务,这种方法就是存储过程。 存储过程是SQL语句和可选控制流语句的预编译集合,存储在数据库中,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。 在SQL Server中存储过程分为两类:即系统提供的存储过程和用户自定义的存储过程。 可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中执行一系列SQL语句。 可以从自己的存储过程内引用其他存储过程,这可以简化一系列复杂语句。 存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,而且减少网络通信的负担。 安全性更高。 创建存储过程 在SQL Server中,可以使用三种方法创建存储过程: ①使用创建存储过程向导创建存储过程。 ②利用SQL Server 企业管理器创建存储过程。 ③使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程。

下面介绍使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程 创建存储过程前,应该考虑下列几个事项: ①不能将 CREATE PROCEDURE 语句与其它SQL语句组合到单个批处理中。 ②存储过程可以嵌套使用,嵌套的最大深度不能超过32层。 ③创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。 ④存储过程是数据库对象,其名称必须遵守标识符规则。 ⑤只能在当前数据库中创建存储过程。 ⑥一个存储过程的最大尺寸为128M。 使用CREATE PROCEDURE创建存储过程的语法形式如下: QUOTE: CREATE PROC[EDURE]procedure_name[;number][;number] [{@parameter data_type}[VARYING][=default][OUTPUT]][,...n] WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}] [FOR REPLICATION] AS sql_statement [ ...n ] 用CREATE PROCEDURE创建存储过程的语法参数的意义如下:

SQLServer数据库基准安全配置标准

MS SQL Server 数据库 基准安全配置标准 目录 1. 将SQL SERVER身份验证设置为仅限WINDOWS (2) 2. 安装最新的补丁更新程序 (2) 3. 优化服务 (2) 4. 限制SQL SERVER 只采用TCP/IP (3) 5. 帐户 (3) 5.1. 使用最低权限帐户运行SQL S ERVER (3) 52 为SA帐号设置强壮的口令 (3) 53 删除SQL来宾用户帐户 (5) 54 删除BUILTIN\A DMINISTRATORS 服务器登录 (5) 5.5. 不为公共角色授予权限 (5) 6. 文件和目录 (5) 6.1. 验证对SQL S ERVER安装目录的访问权限 (6) 6.2. 验证E VERYONE组是否不具有对SQL S ERVER文件的访问权限 (6) 63 保证安装日志文件的安全 (7) 7. SQL SERVER 数据库对象 (7) 7.1. 删除示例数据库 (7) 7.2. 保证存储过程的安全 (7) 7.3. 限制CMD E XEC对SYSADMIN角色的访问权限 (9) 8. 审核和日志 (11)

1.将SQL Server身份验证设置为仅限Windows 应当对SQL Server进行配置,使其支持仅限Win dows身份验证,因为这种验证方式有诸多优点。不必在网络上传送凭据;可避免在数据库连接字符串中嵌入用户名和密码;更易于进行安全管理,因为只需要与一个Windows安全模块而不是另外的SQL Server安全模块打交道;密码到期期间的登录安全性得到提高;最低限度的长度要求及帐户锁定策略。 2. 安装最新的补丁更新程序 包括最新的Windows操作系统以及SQL Server的Service Pack。 3. 优化服务 SQL服务安装程序运行期间将安装以下四个Windows服务: MSSQLSERVER(对于命名实例,则为MSSQL$InstanceNam?。此为SQL Server数据库引擎,是唯一的强制安装服务。 SQLSERVERAGENT (对于命名实例,则为SQLAgent$lnstanceName)。可 借助此支持服务制定命令执行计划及在出错时通知操作人员。 MSSQLServerADHelper。它可提供Active Directory集成服务,包括数据库实 例注册。 Microsoft Search。它可提供全文搜索能力。在任何情况下均须通过本地系统帐户 来运行此服务。 只有MSSQLSERVER数据库引擎是必备的。其余服务提供了附加功能,只在特定情况下才需要使用。如并非必需,请禁用这些服务。 注意:不应将SQL Server配置为以本地系统帐户或本地Administrators组的任何成员

SQLServer OLAP MDX 函数的使用介绍

MDX 函数的使用介绍 根据SqlServer2000 Analysis Services提供的帮助材料展开,略作说明并且根据各个函数的侧重点编写相应的MDX。 数组函数 函数描述 SetToArray将一个或多个集合转换为数组,以用于用户定义函数中。 维度函数 函数描述 Dimension返回包含指定的层次结构、级别或成员的维度。 成员 ?Member?.Dimension 返回包含?Member?的维度。 级别 ?Level?.Dimension 返回包含?Level?的维度。 层次结构 ?Hierarchy?.Dimension 返回包含?Hierarchy?的维度 WITH Member [Measures].[abc] As '[Time]https://www.360docs.net/doc/4318995580.html,' SELECT { [Time].&[1997] } ON COLUMNS ,{ [Product].[All Products] } ON ROWS FROM [Sales] WHERE ( [Measures].[abc]) Dimensions返回多维数据集中基于零的位置是由数值表达式指定的维度,或者其名称是由字符串指定的维度。 数字 Dimensions(?Numeric Expression?) 返回这样的维度,该维度在多维数据集中以零为基的位置是由?Numeric Expression?指定的。 说明Measures 维度总由Dimensions(0) 表示。 字符串 Dimensions(?String Expression?) 返回这样的维度,该维度的名称是由?String Expression?指定的 WITH Member [Measures].[abc] As 'Dimensions("[Time]").Name' SELECT { [Time].&[1997] } ON COLUMNS , { [Product].[All Products] } ON ROWS FROM [Sales] WHERE ( [Measures].[abc]) 层次结构函数

SqlServer数据库安全加固

SQLServer数据库安全配置基线加固操作指 导书 佛山供电局信息中心 2014年4月

目录 1.1 SQLServer数据库安全基线要求 (3) 1.1.1 应对登录操作系统的用户进行身份标识和鉴别 (3) 1.1.2 禁止用Administrator或System用户启动数据库 (4) 1.1.3 密码策略 (4) 1.1.4 用户名的唯一性 (5) 1.1.5 应启用访问控制功能 (5) 1.1.6 管理用户的角色分配权限 (6) 1.1.7 实现操作系统和数据库系统特权用户的权限 (6) 1.1.8 删除多余账户 (6) 1.1.9 审计功能 (7) 1.1.10 审计记录要求 (7) 1.1.11 安装最新补丁 (8) 1.1.12 删除默认安装数据库 (8) 1.1.13 删除不必要的存储过程 (9)

1.1 SQLServer数据库安全基线要求 1.1.1 应对登录操作系统的用户进行身份标识和鉴别 控制台根目录下的SQL Server组/数据库,右建打开数据库属性, 选择安全性,将安全性中的审计级别调整为“全部”,身份验证调整 为“SQL Server 和Windows” SQL Server 2000 SQL Server 2005

1.1.2 禁止用Administrator或System用户启动数据库 1.1.3 密码策略

1.1.4 用户名的唯一性 户名。 为每个管理员添加专门的用户名,建议实名制。 进入“SQLServer管理器->安全性->登陆名(右键)->新建用户名” 进行添加数据库用户名。 1.1.5 应启用访问控制功能

SQLServer和MySql语法和关键字的区别详解

SQL Server 和MySql 语法和关键字的区别 ——用于SQLServer到MySql的转换 对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。 ◆根本的区别是它们遵循的基本原则 二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。 ◆发行费用:MySQL不全是免费,但很便宜 当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。 ◆性能:先进的MySQL 纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式 MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。 MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX 系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。 因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL 作为后台数据库。 当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。 ◆安全功能

SQLServer数据库使用心得

SQLServer数据库使用心得 摘要:ASP+Access的组合方式不能满足现有编程需要,在使用ASP+SQLServer的组合方式中经常遇到的一些问题 关键词:ASPAccess数据库SQLServer数据库 我刚开始学习编写ASP代码时,一般都使用Access数据库,因为它操作简便并且功能强大。ASP+Access的组合方式使用方便,代码执行速度快,很适合做一些中小型网站、聊天室、论坛、网上商城等中小型程序。 但是,从数据安全和数据存贮量的角度考虑,ASP+Access的组合方式无疑存在着很大的弊端:一是数据库可以被入侵者使用网络工具下载;二是Access数据库的存储量有限,当数据记录过多时,会导致相应的程序代码出错或者没有响应。 基于上述原因,我开始使用SQLServer数据库,在实际应用中遇到了很多问题,我通过查找参考书和网络论坛解决了其中的一部分,现总结如下几点,与大家共同探讨一下。 …sa?登录失败。原因:未与信任SQLServer连接相关联 当你确认自己的SQLServer安装使用正常,数据库连接代码没有错误,数据库也附加成功,出现上述错误时,请检查SQLServer属性中安全性配置的身份验证方式,应该使用SQLServer和Windows混合认证方式,如果使用的是仅Windows认证方式,就会显示该项错误提示。 刚开始使用SQLServer数据库的时候,由于不了解认证方式的区别,我以为是自己的SQLServer数据库安装有问题,重装了几次,费时费力还没有解决问题,幸好网络上高手众多,才发现原来是如此简单的一个认证方式的原因,令人汗颜。 2ACCESS转化成SQLServer2000需要注意的几个问题 2.1转换的方法 (1)打开SQLServer企业管理器“控制台”下“工具”中的“数据转换服务”中的“数据导入”;(2)库,然后确定。(3)选择目的,选择用于SQLServer的microsoftOLEDB 提供程序;服务器选择,如果是本机,默认(local);认证方式两种选择均可;数据库可

SQLServer时间日期函数详解

SQLServer时间日期函数详解,SQLServer,时间日期, 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:0 0.000 3. datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回:17 select datediff(day,'2004-09-18','2004-09-01') --返回:-17 4. datepart 返回代表指定日期的指定日期部分的整数。 SELECT DATEPART(month, '2004-10-15') --返回10 5. datename 返回代表指定日期的指定日期部分的字符串 SELECT datename(weekday, '2004-10-15') --返回:星期五 6. day(), month(),year() --可以与datepart对照一下 select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114) select datename(dw,'2004-10-15') select 本年第多少周=datename(week,'2004-10-15') ,今天是周几=datename(weekday,'2004-10-15') 函数参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 参数interval的设定值如下: 值缩写(Sql Server)(Access 和ASP) 说明 Year Yy yyyy 年1753 ~ 9999 Quarter Qq q 季1 ~ 4 Month Mm m 月1 ~ 12 Day of year Dy y 一年的日数,一年中的第几日1-366

sqlserver数据库安全配置规范

竭诚为您提供优质文档/双击可除sqlserver数据库安全配置规范 篇一:sqlserver2000的安全配置 sqlserver2000的安全配置 sqlserver2000的安全配置在进行sqlserver2000数据库的安全配置之前,首先你必须对操作系统进行安全配置,保证你的操作系统处于安全状态。然后对你要使用的操作数据库软件(程序)进行必要的安全审核,比如对asp、php 等脚本,这是很多基于数据库的web应用常出现的安全隐患,对于脚本主要是一个过滤问题,需要过滤一些类似,‘;@/等字符,防止破坏者构造恶意的sql语句。接着,安装sqlserver2000后请打上补丁sp1以及最新的sp2。 下载地址是:/sql/downloads/2000/sp1.asp 和/sql/downloads/2000/sp2.asp 在做完上面三步基础之后,我们再来讨论sqlserver的安全配置。 1、使用安全的密码策略 我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库帐号的密码过于简单,这跟系统密码过于简单是

一个道理。对于sa更应该注意,同时不要让sa帐号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步!sqlserver2000安装的时候,如果是使用混合模式,那么就需要输入sa的密码,除非你确认必须使用空密码。这比以前的版本有所改进。同时养成定期修改密码的好习惯。数据库管理员应该定期查看是否有不符合密码要求的帐号。 比如使用下面的sql语句: usemaster selectname,passwordfromsysloginswherepasswordisnull 2、使用安全的帐号策略 由于sqlserver不能更改sa用户名称,也不能删除这个超级用户,所以,我们必须对这个帐号进行最强的保护,当然,包括使用一个非常强壮的密码,最好不要在数据库应用中使用sa帐号,只有当没有其它方法登录到sqlserver 实例(例如,当其它系统管理员不可用或忘记了密码)时才使用sa。建议数据库管理员新建立个拥有与sa一样权限的超级用户来管理数据库。安全的帐号策略还包括不要让管理员权限的帐号泛滥。 sqlserver的认证模式有windows身份认证和混合身份认证两种。如果数据库管理员不希望操作系统管理员来通过操作系统登陆来接触数据库的话,可以在帐号管理中把系统

Sqlserver函数大全

Sql 2008 函数大全 SQL2008 表达式:是常量、变量、列或函数等与运算符的任意组合。 1. 字符串函数 函数名称参数示例说明 ascii(字符串表达式) select ascii('abc') 返回 97 返回字符串中最左侧的字符的ASCII 码。 char(整数表达式) select char(100) 返回 d 把ASCII 码转换为字符。 介于0 和 255 之间的整数。如果该整数表达式不在此围,将返回NULL 值。 charindex(字符串表达式 1, 字符串表达式2[,整数表达式]) select charindex('ab','BCabTabD') 返回 3 select charindex('ab','BCabTabD', 4) 返回 6 在字符串2 中查找字符串 1,如果存在返回第一个匹配的位置,如果不存在返回0。如果字符串 1 和字符串 2 中有一个是null 则返回 null。 可以指定在字符串2 中查找的起始位置。 difference(字符串表达式 1,字符串表达式 2) select difference('Green','Greene') 返回 4 返回一个0 到 4 的整数值,指示两个字符表达式的之间的相似程度。 0 表示几乎不同或完全不同, 4 表示几乎相同或完全相同。 注意相似并不代表相等 left(字符串表达式,整数表达式) select left('abcdefg',2) 返回 ab 返回字符串中从左边开始指定个数的字符。 //貌似下标从1开始? right(字符串表达式,整数表达式) select right('abcdefg',2) 返回 fg

SQLServer数据库安全策略

SQLServer 高振清 (健雄职业技术学院,江苏[摘 要]文中论述了SQLServer数据库安全机制。[关键词]SQLServer;数据库;安全策略—————————————————————————— —作者简介:高振清,男,江苏太仓人,学士,讲师,研究方向:计算机与自动化。 1.前言 微软的SQL Server 数据库是一种广泛使用的数据库,很多电子商务网站、企业内部信息化平台等都是基于SQL Server 数据库上的, 但是数据库的安全性还没有被人们跟系统的安全性等同起来,一般认为只要把网络和操作系统的安全搞好了,那么所有的应用程序也就安全了。而且一些安全公司也忽略数据库安全,这就使数据库的安全问题更加严峻。数据库系统中存在的安全漏洞和不当的配置通常会造成严重的后果,而且难以发现。数据库应用程序通常同操作系统的最高管理员密切相关。SQL Server 数据库又是属于“端口”型的数据库,这就表示任何人都能够用分析工具试图连接到数据库上,从而绕过操作系统的安全机制,进而闯入系统、 破坏和窃取数据资料,甚至破坏整个系统。从而对SQL Server 数据库的安全策略进行探讨有着极其重要的现实意义。 2.SQLServer数据库安全体系结构 SQL Server 数据库安全性管理是建立在认证(authentication)和访问许可(permission)两者机制上。认证是指来确定登陆SQL Server 数据库的用户的登陆帐号和密码是否正确,以此来验证其是否具有连接SQL Server 数据库的权限。但是,通过认证阶段并不代表能够访问SQL Server 数据库中的数据,用户只有在获取访问数据库的权限之后,才能够对服务器上的数据库进行权限许可下的各种操作(主要是针对数据库对象,如表、视图、存储过程等),这种用户访问数据库权限的设置是通过用户帐号来实现的。同时在SQL Server 数据库中,角色作为用户组的代替物大大地简化了安全性管理。在SQL Server 数据库的安全模型中主要包括SQL Server 登录、数据库用户、权限、角色。由图1可见,SQL Server 的安全控制策略是一个层次结构系统的集合。 图1SQLServer安全性控制策略示意图3.3.1 SQL 注入就是利用插入有害字符进行攻击的技术,也称SQL 注射式攻击。SQL 注入攻击是攻击者把SQL 语句插入到Web 表单的输入域或页面请求查询字符串中,欺骗服务器执行恶意SQL 语句的操作,它是应用程序级攻击Web 主要途径,是黑客攻击的最常见手段,是构建网络安全的一大障碍。目前来说,对于SQL 注入攻击的防范主要是要找到一种能保证代码兼容性的方法。 SQL Server 虽然没有直接提供防止SQL 注入攻击的对象和方法, 但它却提供了丰富的、强大的防御工具。合理地利用这些机制,对防止SQL 注入攻击很重要。 其次,构建安全的参数类型,进一步过滤掉组装的SQL 语句对Web 站点的注入攻击。把用户验证的SQL 语句构造到存储过程中是行之有效的方法。如下面的Proc_IsUserValid 存储过程: Create Procedure Proc IsUserValid @UserName Varchar(32),@Password Varchar(32)As Select Count(*)from Users Where UserName=@U serN ame And Cast (Password As Varbinary)=Cast (@Password As Varbinary) Go 然后就是使用弱权账户来间接访问数据库。下面是实现授权给SafeUser 帐户一个缺乏 “drop table ”权限的数据库脚本,SafeUser 账户除了调用Proc_IsUserValid 外没有任何其它权限。 Create DataBase WebLogin Go Use WebLogin Go Create table Users (UserName Varehar (32)Not Null , Password Varchar(32)Not Null)Go Insert Into Users (UserName ,Password) —79—

SQLServer语法编写规范文档(SQL语句)V 0.5

【文档说明】:SQL语法编写没有标准的国际或厂家规范,与实际的客户和项目相关。本文档参考微软(中国)有限公司服务部实施项目中使用的编码规范,仅供参考。 1SQL对象命名规范 2SQL对象设计规范 2.1字段设计要求 1.日期类型使用Datetime, 2.与数字相关的字段类型统一用numeric(M,N)格式。 3.整数类型用int. 4.用nvarchar类型. 5.逻辑或标识的字段不用bit而用char(1)来表示方便编程和提高运算速度. 6.图象字段采用Image类型. 7.主键一般要无意义,没有特殊的需要不要用复合主键(如果是由几个表派生出来的关系 数据表可以使用复合主键),可以采用sql server默认的自增加的ID字段做主键。 8.Not Null字段要加默认值。

2.2视图使用原则 1.视图字段名要尽量使用源表字段名,如果有重复,加上源表名作前缀。 2.增删改等操作不要直接使用视图,要使用源表进行。 3.如果系统对数据结构不需要保密,则只有对于复杂的、经常使用查询结果,才有必要使 用视图。 4.如果系统要求数据结构保密,可以大量使用视图。 2.3存储过程建立规则 1.存储过程要有异常处理部分,确保过程的可执行性。 2.尽量在脚本加入设计思路的注释。 3.尽量减少临时表的使用,如确实需要,可以考虑使用表变量替代。 2.4函数建立规则 1.函数要有异常处理部分,确保过程的可执行性。 2.尽量在脚本加入设计思路的注释。 2.5触发器使用要求 1.尽量少使用触发器。如果有必要,则要综合考虑触发器的效率建立。 2.有外键关联的表,尽量使用外键的update、delete属性替代触发器的功能。 3SQL语句编写规范 数据库开发阶段主要完成业务活动所必须的存储过程和触发器程序,Oracle使用使用PL/SQL,Microsoft SQLServer使用T-SQL编写。 3.1代码书写规范 ●存储过程、触发器、自定函数书写宽度一般不要超过编辑区的可见范围(80字符左右); ●代码应按层次进行缩排书写,采用四空格缩进格式。将代码编辑器中制表键配置为使用 空格填充,而不是使用制表符。 ●SQL命令应根据命令长短调整命令语句中的关键字排列,使语句看起来结构清晰。 ●SQL命令中的字段(列)与参数或表达式应合理安排书写位置,使对应关系看起来清 晰明了。 ●使用一个空行分隔T-SQL 代码的逻辑块。 ●水平列出的字段(或参数或表达式)之间的逗号前后要留有适量空格,字段列表过长时

SQLServer 角色与权限管理

SQLServer 角色与权限管理 安全性是所有数据库管理系统的一个重要特征。理解安全性问题是理解数据库管理系统安全性机制的前提。 1.第一个安全性问题:当用户登录数据库系统时,如何确保只有合法的用户才能登录到系统中?这是一个最基本的安全性问题,也是数据库管理系统提供的基本功能。 在Microsoft SQL Server 2008系统中,通过身份验证模式和主体解决这个问题。 1)身份验证模式 Microsoft SQL Server 2008系统提供了两种身份验证模式:Windows身份验证模式和混合模式。 Windows身份验证模式: 在该模式中,用户通过Windows用户账户连接SQL Server时,使用Windows操作系统中的账户名和密码。 混合模式: 在混合模式中,当客户端连接到服务器时,既可能采取Windows身份验证,也可能采取SQL Server身份验证。 主体是可以请求系统资源的个体或组合过程。例如,数据库用户是一种主体,可以按照自己的权限在数据库中执行操作和使用相应的数据。 2)主体 主体是可以请求系统资源的个体或组合过程。例如,数据库用户是一种主体,可以按照自己的权限在数据库中执行操作和使用相应的数据。 Microsoft SQL Server 2008系统有多种不同的主体,不同主体之间的关系是典型的层次结构关系,位于不同层次上的主体其在系统中影响的范围也不同。位于层次比较高的主体,其作用范围比较大;位于层次比较低的主体,其作用范围比较小。 2.第二个安全性问题:当用户登录到系统中,他可以执行哪些操作、使用哪些对象和资源?

在Microsoft SQL Server 2008系统中,通过安全对象和权限设置来解决这个问题。 3.第三个安全性问题:数据库中的对象由谁所有?如果是由用户所有,那么当用户被删除时,其所拥有的对象怎么办,难道数据库对象可以成为没有所有者的“孤儿”吗? 在Microsoft SQL Server 2008系统中,这个问题是通过用户和架构分离来解决的。 安全机制的5个等级: 客户机安全机制 网络传输的安全机制 实例级别安全机制 数据库级别安全机制 对象级别安全机制

SqlServer convert 函数使用

CONVERT的使用方法: 格式: CONVERT(data_type,expression[,style]) 说明: 此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,var char) 相互转换的时候才用到. 例子: SELECT CONVERT(varchar(30),getdate(),101) now 结果为 now --------------------------------------- 09/15/2001 style数字在转换时间时的含义如下 ------------------------------------------------------------------------------------------------- Style(2位表示年份) | Style(4位表示年份) | 输入输出格式 ------------------------------------------------------------------------------------------------- - | 0 or 100 | mon dd yyyy hh:miAM(或PM) ------------------------------------------------------------------------------------------------- 1 | 101 | mm/dd/yy ------------------------------------------------------------------------------------------------- 2 | 102 | yy-mm-dd -------------------------------------------------------------------------------------------------

相关文档
最新文档