转自:http://dev.yesky.com/450/7619450.shtml

2007-10-22 14:00 来源:论坛整理 作者:luolina 责任编辑:幽灵·yesky

Microsoft® SQL Server™ 中的安全系统在最低级别,即数据库本身上实现。无论使用什么应用程序与 SQL Server 通讯,这都是控制用户活动的最佳方法。但是,有时必须自定义安全控制以适应个别应用程序的特殊需要,尤其是当处理复杂数据库和含有大表的数据库时。

此外,可能希望限制用户只能通过特定应用程序(例如使用 SQL 查询分析器或 MicrosoftExcel)来访问数据或防止用户直接访问数据。限制用户的这种访问方式将禁止用户使用应用程序(如 SQL 查询分析器)连接到 SQL Server 实例并执行编写质量差的查询,以免对整个服务器的性能造成负面影响。

SQL Server 通过使用应用程序角色适应这些要求。应用程序角色与标准角色有以下区别:

◆应用程序角色不包含成员。

不能将 Microsoft Windows NT® 4.0 或 Windows® 2000 组、用户和角色添加到应用程序角色;当通过特定的应用程序为用户连接激活应用程序角色时,将获得该应用程序角色的权限。用户之所以与应用程序角色关联,是由于用户能够运行激活该角色的应用程序,而不是因为其是角色成员。

◆默认情况下,应用程序角色是非活动的,需要用密码激活。

◆应用程序角色不使用标准权限。

当一个应用程序角色被该应用程序激活以用于连接时,连接会在连接期间永久地失去数据库中所有用来登录的权限、用户帐户、其它组或数据库角色。连接获得与数据库的应用程序角色相关联的权限,应用程序角色存在于该数据库中。因为应用程序角色只能应用于它们所存在的数据库中,所以连接只能通过授予其它数据库中 guest 用户帐户的权限,获得对另一个数据库的访问。因此,如果数据库中没有 guest 用户帐户,则连接无法获得对该数据库的访问。如果 guest 用户帐户确实存在于数据库中,但是访问对象的权限没有显式地授予 guest,则无论是谁创建了对象,连接都不能访问该对象。用户从应用程序角色中获得的权限一直有效,直到连接从 SQL Server 退出为止。

若要确保可以执行应用程序的所有函数,连接必须在连接期间失去应用于登录和用户帐户或所有数据库中的其它组或数据库角色的默认权限,并获得与应用程序角色相关联的权限。例如,如果应用程序必须访问通常拒绝用户访问的表,则应废除对该用户拒绝的访问权限,以使用户能够成功使用该应用程序。应用程序角色通过临时挂起用户的默认权限并只对他们指派应用程序角色的权限而克服任何与用户的默认权限发生的冲突。

应用程序角色允许应用程序(而不是 SQL Server)接管验证用户身份的责任。但是,SQL Server 在应用程序访问数据库时仍需对其进行验证,因此应用程序必须提供密码,因为没有其它方法可以验证应用程序。

如果不需要对数据库进行特殊访问,则不需要授予用户和 Windows NT 4.0 或 Windows 2000 组任何权限,因为所有权限都可以由它们用来访问数据库的应用程序指派。在这种环境下,假设对应用程序的访问是安全的,则在系统范围内统一使用指派给应用程序角色的密码是可能的。

有几个选项可用于管理应用程序角色密码而无须将其硬编码到应用程序中。例如,可以使用存储在注册表(或 SQL Server 数据库)中的加密键,只有应用程序有加密键的解密代码。应用程序读取键,对其进行解密,并使用其值设置应用程序角色。如果使用多协议 Net-Library,则含有密码的网络数据包也可以被加密。另外,当角色被激活时,可以在发送到 SQL Server 实例前将密码加密。

如果应用程序用户使用 Windows 身份验证模式连接到 SQL Server 实例,则在使用应用程序时,可以使用应用程序角色设置 Windows NT 4.0 或 Windows 2000 用户在数据库中拥有的权限。这种方法使得当用户使用应用程序时,对用户帐户的 Windows NT 4.0 或 Windows 2000 审核及对用户权限的控制容易维护。

如果使用 SQL Server 身份验证,并且不要求审核用户在数据库中的访问,则应用程序可以更容易地使用预定义的 SQL Server 登录连接到 SQL Server 实例。例如,订单输入应用程序验证运行该应用程序的用户,然后用相同的 OrderEntry 登录连接到 SQL Server 实例。所有连接都使用同一登录,相关权限授予该登录。

说明 应用程序角色可以和两种身份验证模式一起使用。

示例

作为应用程序角色使用的示例,假设用户 Sue 运行销售应用程序,该应用程序要求在数据库 Sales 中的表 Products 和 Orders 上有 SELECT、UPDATE 和 INSERT 权限,但她在使用 SQL 查询分析器或任何其它工具访问 Products 或 Orders 表时不应有 SELECT、INSERT 或 UPDATE 权限。若要确保如此,可以创建一个拒绝 Products 和 Orders 表上的 SELECT、INSERT 或 UPDATE 权限的用户-数据库角色,然后将 Sue 添加为该数据库角色的成员。接着在 Sales 数据库中创建带有 Products 和 Orders 表上的 SELECT、INSERT 和 UPDATE 权限的应用程序角色。当应用程序运行时,它通过使用 sp_setapprole 提供密码激活应用程序,并获得访问 Products 和 Orders 表的权限。如果 Sue 尝试使用除该应用程序外的任何其它工具登录到 SQL Server 实例,则将无法访问 Products 或 Orders 表。

[转]SQL Server建立应用程序安全性和程序角色的更多相关文章

  1. 与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。

    今天同学请教我数据库为什么打不开了,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在 ...

  2. 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    由于项目中必须得用JDK6来作为Java环境,于是连接SQLServer时出现了com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安 ...

  3. 远程连接SqlServer 数据库时提示 "在与SQL Server 建立连接时出现与网络相关的或特定实例的错误" 解决方法

    前言 由于在之前的职业生涯中, 无论是数据库还是开发环境, 都是前人弄好的,自己只管使用就好啦.并不知安装过程中会出现各种各样的错.最近接触服务器之后,开发环境以及配置各方面都是从头到脚开始安装到配置 ...

  4. Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”

    可能问题一: 确切的说是在IIS 7.5中有这问题 就是在visual studio中都用的好好的,但是加载到IIS上的时候竟然报错“ 在与 SQL Server 建立连接时出现与网络相关的或特定于实 ...

  5. SqlServer 之 用 IP 地址连接数据库报错" 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误 "

    问题描述:       在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (p ...

  6. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

    在visual studio 中添加数据库应用时,报错,提示如下: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL ...

  7. 在与SQL Server建立连接时出现于网络相关的或特定于实例的错误

    客户遇到一个问题,用“服务器名\实例名”远程连接另外一台命名实例的时候连接失败,报“在与SQL Server建立连接时出现于网络相关的或特定于实例的错误,未找到或无法访问服务器.请验证实例名称是否正确 ...

  8. VS 连接数据库报错:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

    VS报错:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider ...

  9. JDBC连接数据库遇到的“驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。

    要从旧算法列表中删除3DES: 在JDK 8及更早版本中,编辑该 /lib/security/java.security文件并3DES_EDE_CBC从jdk.tls.legacyAlgorithms ...

  10. C# 发布时出现:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: SQL ...

随机推荐

  1. 【风马一族_Android】Android 前端内容1

    Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...

  2. “==”,比较的是引用 “equals方法”比较的是具体内容

    package com.java1234.chap03.sec08; public class Demo2 { public static void main(String[] args) { //“ ...

  3. ADO.NET笔记——使用Command执行增删改操作,通过判断ExecuteNonQuery()返回值检查是否操作成功

    相关知识: ExecuteNonQuery()方法:执行CommandText属性所制定的操作,返回受影响的记录条数.该方法一般用来执行SQL中的UPDATE.INSERT和DELETE等操作 对于U ...

  4. JVM调优总结 -Xms -Xmx -Xmn -Xss(转载)

    堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...

  5. 另辟思路解决 Android 4.0.4 不能监听Home键的问题

    问题描述: 自从Android 4.0以后,开发人员是不能监听和屏蔽Home键的,对于KEYCODE_HOME,官方给出的描述如下: Home key. This key is handled by ...

  6. string和json转换的简单应用

    import com.alibaba.fastjson.JSON; String strjson = request.getParameter("param"); //url-js ...

  7. python: 实现sha1小工具

    File1: sha1.py File2: sha1.bat ------------------ File1: sha1.py import hashlib import os,sys def Ca ...

  8. Ant之build.xml

    转载地址:http://www.cnblogs.com/clarkchen/archive/2011/03/10/1980194.html http://lisongqiu168.iteye.com/ ...

  9. 大陆Azure 改版

    好吧主页的又改版了这下终于容易区分大陆与国际版的区别了.2014年12月12日起改版. 主页再次沦落为找不到东西的后果,其实很少进入这个主页,一般也直接使用http://manage.windowsa ...

  10. Microsoft AzureStorageAccount for Powershell

    使用Powershell 创建的存储账户,注意StorageAccountName只能使用小写字母以及数字, -Location参考http://www.cnblogs.com/SignalTips/ ...