当前位置: 首页 > 编程日记 > 正文

6.2 sql安全性

最后的例子将显示如何通过现有证书创建-个新的用户。本章稍后会介绍证书,但在

这个例子中,首先创建证书,后创建用户:

USE AdventureWorks2008; CREATE CERTIFICATE SalesCert ENCRYPTION BY PASSWORD ='P@ssw0rd'

WITH SUBJECT = fSales Schema Certificate EXPIRYDATE =•12/31/2010•;

GO

CREATE USER SalesSecurity FOR CERTIFICATE SalesCert GO

也可以使用ALTER USER语句来更改用户帐户。这里再次体现了 Transact-SQL的灵活性

Management Studio 大得多。ALTER SCHEMA 可用于修改 name 属性和 DEFAULT SCHEMA

属性。如果希望更改帐户所关联的Windows SQL登录名,也可以使用LOGIN=选项。 要知道,LOGIN选项只能用于将用户与和其最初创建时同类型的登录名相关联。对于作为

证书或密钥创建的用户,这个选项并不适用。下面的例子演示了这些选项:

USE AdventureWorks2008 ALTER USER SalesSecurity WITH NAME =SalesSchem.aSecurity;

GO

USE AdventureWorks2008 ALTER USER BillyBob WITH DEFAULT^SCHEMA =Production;

GO

--Create a new login USE master CREATE LOGIN TempCarol WITH PASSWORD = *MyPassword*, CHECK_POLICY =OFF;

GO

USE tempdb ALTER USER Carol WITH Login =TempCarol;

GO

最后,一旦一个用户不再有用,可以使用DROP USER语句把它从数据库中删除。DROP

USER语句很简单,如下所示:

USE AdventureWorks2008 DROP USER BillyBob; GO

较早版本的SQL将对象所有者显式捆绑到对象的命名上下文中。例如,如果名为

BillyBob的用户创建了一个名为Orders的表,那么该表将被命名为BillyBob.Orders。SQL

Server2008允许将对象架构与其所有者相分离。当删除一个用户时,将其拥有的对象保留 在可能为一个角色或一个Windows组所有的架构中,这种分离有助于减少孤立对象。在以 往版本中可以看到,管理全部由dbo拥有的对象更加简单,但使用架构有助于提供一个更 合乎逻辑和层次化的安全设计。

6 .2 .5 固定数据库角色

每个SQLServer数据库都有一系列固定数据库角色,可用于在必要时把权限委托给用 户。和固定服务器角色一样,对于固定数据库角色来说,唯一可以改变的就是成员资格。

知道如何以及何时使用这些角色十分重要。

6-9列出了固定数据库角色。

注意,固定数据库角色包括db denydatareader db_denydatawriter。这些角色显式拒

绝对数据库中的用户表的读或写,& 小心使用。拒绝权限是绝对的,不能被覆盖。

用户定义的数据库角色对管理权限和对数据库中的资源的访问提供了更多的控制。在

使用基于角色的安全模型时,可能经常发现内置主体(比如Windows中的组或SQL中的角 )提供了过多的访问权限,或者没有提供足够的权限。在这种情况下,可以创建用户定义

的角色,控制整个一组用户对安全对象的访问。在概念上,数据库角色与Windows组很相 似。您可以创建一个数据库角色来标识一组需要访问共同资源的用户,或者也可以用角色

来标识授予数据库中的一个安全对象的权限。不管角色的用途是什么,其功能应由角色名

称明确指出。

1 . Management Studio中新建一个用户定义的数据库角色

“数据库角色-新建”对话框中,系统会提示为一个角色提供一个名称,并为该角

色指定一个所有者。角色的所有者可以在任何时候修改该角色。也可以为该角色选择现有

的架构,并添加用户作为这一角色的成员。除了 “常规”属性页之外,还 “安全对象”

页和“扩展属性”页,它们可以分别用来指派权限或者设置额外属性。

在这个例子里,可以创建一个名为ProductionRole的新数据库角色,然后将Carol 加为其成员:

(1) “对象资源管理器”中展开“数据库”节点。

(2) 展开AdventureWorks2008节点,然后展开“安全性”节点。

(3) “角色”节点,然后展开“数据库角色”节点。

(4) “数据库角色”文件夹,选 “新建数据库角色”命令,这将打开“数据库

角色一新建”对话框(如图6-7所示)。

(5)  “角色名称”框中, ProductionRole。

(6) 在该角色的成员列表(应该是空的)下,单击“添加”按钮。
(7) 在窗口中输入C arol,单击“检查名称”按钮。这样将解析她的名称。单击“确定” 按钮。
(8) 在 “数据库角色-新建”窗口中,单 击 “确定”按钮。
2. CREATE ROLE 语句
CREATE ROLE是Transact-SQL中用来新建用户定义的数据库角色的语句。使用CREATEROLE语句时,也可以指定角色的所有者。注意,如果要指派一个用户作为角色所有者,
那么必须有IMPERSONATE权限。如果指派另一个角色作为所有者,则必须是该角色的成
员,或者具有对该角色使用ALTER的权限。下列语句创建了一个名为SalesStaff的角色, 并指派Carol为所有者:
USE AdventureWorks2008 CREATE ROLE SalesStaff AUTHORIZATION Carol;
GO
ALTER ROLE语句的功能相当有限,仅允许更改角色的名称:
USE AdventureWorks2008 ALTER ROLE SalesStaff WITH NAME =SalesStaffRole;
GO
DROP ROLE rolename可用于从数据库中删除不再需要的角色:
USE AdventureWorks2008 DROP ROLE SalesStaffRole;
GO
和固定服务器角色一样,通过SQL Server Management Studio或存储过程,可以将用户添
加到固定的和用户定义的数据库角色中。针对数据库角色的存储过程是sp_addrolem ember。与
向服务器角色添加或从中删除成员的存储过程不同,sp addrolemember和 sp droprolemember
将角色标识为第一变量,将用户标识为第二变量。
下面的示例将数据库用户Carol添加到db datareader角色中:
USE AdventureWorks2008 EXEC sp_addrolemember * db_datareader *, 1 Carol1;
GO
要将Carol从 db_datareader角色中删除,可执行下列存储过程:
USE AdventureWorks2008 EXEC sp_dropro1emember 'db_datareader', 'Carol1 ;
GO
3 .应用程序角色
另外一种可以用来帮助保护数据库环境的角色类型是应用程序角色。应用程序角色和
标准的角色类型截然不同,它们没有成员,可以(而且应该)被配置为使用密码进行身份验
证。当运行一个特定的应用程序的所有用户必须采用同样的数据库访问时,通常使用应用
程序角色。应用程序可以不需要提示用户提供用户名和密码就实例化应用程序角色,从而
避免了依赖于个人用户是否拥有适当的访问权限让应用程序正常工作。
可以在SQL Server Management Studio的 “应用程序角色”文件夹中创建一个新的应
用程序角色。创建新的应用程序角色的对话框和标准数据库角色对 话 框 非 常 相 只 是 它有密码字段,但没有成员列表。
创建•-个应用程序角色
本例创建一个名为PurchasingOrderEntry的新应用程序角色,密码是POEpassl:
(1) 在 “对象资源管理器’’中 展 开 “数据库”节点。
(2) 展 开 AdventureWorks2008, 然后展开“安全性”节点。
(3) 展 开 “角色”节点,然后 展 开 “应用程序角色”节点。
(4) 右 击 “应用程序角色”文件夹,选 择 “新建应用程序角色”命令,这 将 打 开 “应
用程序角色一新建”对话框(如图6-8所示)。
(5) 输入角色名称 PurchasingOrderEntry。 (6) .将默认架构设置为Purchasing。
(6)(7) 在 “密码”和 “确认密码”框中输入POEpassl。 (8) 单 击 “确定”按钮。

下一节将讨论如何实例化该角色。

4 .使用 CREATE APPLICATION ROLE

CREATE APPLICATION ROLE的作用正如其名。使用这个语句时,可指定应用程序

角色的名称和该角色的密码,并可以为该角色设覽默认架构。下面的示例创建了一个名为

SalesApp的应用程序角色:

USE AdventureWorks2008 CREATE APPLICATION ROLE SalesApp WITH PASSWORD = ,P@ssw0rd', DEFAULT_SCHEMA =Sales; GO

要使用应用程序角色,可以执行sp_setapprole存储过程。可以从一个应用程序中调用 该存储过程,或者在査询窗口中测试它。该存储过程包括了激活应用程序角色的选项:提

供加密的密码,创建一个cookie并在cookie中设置信息。下面的命令激活了 SalesApp 用程序角色,然后返冋用户名:

USE AdventureWorks2008 GO

DECLARE Gcookie varbinary(8000); EXEC sp_setapprole * SalesApp1, 1PQsswOrd' , QfCreateCookie =true, Qcookie =@cookie OUTPUT;

GO

SELECT USER_NAME();

一旦执行了上述脚本,该连接执行的所有活动都将在该应用程序角色下操作。当关闭

连接时,应用程序角色会话也会终止。

通过ALTER APPLICATION ROLE语句,可以更改应用程序角色的名称、密码和默认

架构。下面的示例将角色名称SalesApp改为Order Entry,并设置了一个新密码:

USE AdventureWorks2008 ALTER APPLICATION ROLE SalesApp WITH NAME =OrderEntryF PASSWORD =*newP@ssw0rd,; GO

如果想运行该ALTER APPLICATION ROLE脚本,清确保没有正以这个应用程序角色

进行连接。在自己的凭据下打开一个新的査询窗口可以防止错误发生。

DROP APPLICATION ROLE rolename可从数据库中删除一个应用程序角色。确保没有

任何应用程序仍在使用该应用程序角色,否则该应用程序将无法连接到数据库,例如:

USE AdventureWorks2008 DROP APPLICATION ROLE OrderEntry;

GO

5 .更多信息

6-10列出的安全目录视图可以用来标识数据库中的主体以及它们的角色成员资格。

为了向后兼容,Microsoft SQL Server 2008支持表6-11列出的存储过程。记住,这些

存储过程是“遗留”工具, SQL Server的未来版本中可能会被删除。

转载于:https://www.cnblogs.com/zhouwansheng/p/9358100.html

相关文章:

2022,人工智能开启未来新密码

作者 | 剑客阿良_ALiang(胡逸) 出品 | AI科技大本营(ID:rgznai100) 购买大型电器、汽车,你是否会询问有没有智能语音功能?是的,潜移默化中人们已经不再将人工智能当作魔术,而是习以为…

PHP Socket配置以及实例

2个php测试文件 server.php <?php//phpinfo();//确保在连接客户端时不会超时set_time_limit(0);$ip 127.0.0.1;$port 1935;/*-------------------------------* socket通信整个过程-------------------------------* socket_create* socket_bind* socket_lis…

Windows下msysGit使用及相关配置

Windows下msysGit使用及相关配置

使用可信证书为windows RDP服务提供加密

2019独角兽企业重金招聘Python工程师标准>>> 0x01 前言 在windows server下可以通过配置远程桌面服务为RDP连接提供有效的数字证书以便提高安全性。 可是个人用户或并没有部署域控制器的用户是无法通过这种途径修改RDP所使用的数字证书&#xff0c;在不安全的环境中…

JavaScript跨域总结与解决办法

JavaScript跨域总结与解决办法 什么是跨域1、document.domainiframe的设置2、动态创建script3、利用iframe和location.hash4、window.name实现的跨域数据传输5、使用HTML5 postMessage6、利用flash本文来自网络&#xff08;http://f2e.me/200904/cross-scripting/&#xff0c;该…

这几个 Python 的小技巧,你会么?

来源丨Python小二作者 Peter Gleeson 是一名数据科学家&#xff0c;日常工作几乎离不 python。一路走来&#xff0c;他积累了不少有用的技巧和 tips&#xff0c;现在就将这些技巧分享给大家。这些技巧将根据其首字母按 A-Z 的顺序进行展示。ALL OR ANYPython 之所以成为这么一门…

如何创建可扩展表视图中的iOS 学习和拓展优化(有待更新)

首先介绍老外的文章&#xff1a;《How To Create an Expandable Table View in iOS》这是老外用Swift实现的&#xff0c;对应的老外github项目源码&#xff1a;https://github.com/appcoda/expandable-table-view小编经过学习了老外的Expandable Table View然后用Objective-C实…

String、StringBuffer、StringBuilder的理解

问题: 理解 Java的字符串&#xff0c;String、StringBuffer、StringBuilder 有什么区别&#xff1f; 知识点 字符串设计和实现考量 String是Immutable(线程安全、字符串常量池复用)。Immutable对象在拷贝时候不需要额外复制数据。至于为什么imumutable&#xff0c;源码如下&…

Linux(centos6.0)下安装Node.js以及使用

Linux下(centos6.0)安装Node.js1.wget http://nodejs.org/dist/node-v0.6.9.tar.gz tar zxvf node-v0.6.9.tar.gz cd node-v0.6.9 ./configure --prefix/usr/local/node ----------安装提示-------------Checking for program g or c : not found Checking for progr…

Pandas 中的这些函数/属性将被 deprecated

作者 | luanhz来源丨小数志导读Pandas对于日常数据分析和处理来说是最常用的工具&#xff08;没有之一&#xff09;&#xff0c;笔者之前也总结分享了很多相关用法和技巧。与之不同&#xff0c;今天本文来介绍几个已经在函数文档中列入"deprecated"的函数/属性&#…

2016.01.04 论文改重

今天的任务是修改查重的问题&#xff0c;另外加入参考文献。 其中&#xff0c;上午的时间完成论文查重。 下午的时间完成参考文献的丰富和标记。 晚上的时间完成DOM基础&#xff08;李炎恢&#xff09;的学习 预计晚上八点到晚上十点 优先级&#xff1a;论文查重&#xff0c;参…

完美数据迁移-MongoDB Stream的应用

目录 一、背景介绍二、常见方案1. 停机迁移2. 业务双写3. 增量迁移三、Change Stream 介绍监听的目标变更事件四、实现增量迁移五、后续优化小结附参考文档一、背景介绍 最近微服务架构火的不行&#xff0c;但本质上也只是风口上的一个热点词汇。 作为笔者的经验来说&#xff0…

Tslib移植与分析【转】

转自&#xff1a;http://blog.csdn.net/water_cow/article/details/7215308 目标平台&#xff1a;LOONGSON-1B开发板&#xff08;mips32指令集&#xff09;编译平台&#xff1a;x86PC--VMware6.5--Ubuntu10.04&#xff08;下面简称“ubuntu系统”&#xff09; 或&am…

用 Python 写一个天天酷跑,在线摸鱼不烦恼

来源丨Python小二写出来的效果图就是这样了&#xff1a;下面就更新一下全部的代码吧~还是老样子先定义import pygame,sys import random写一下游戏配置width 1200 #窗口宽度 height 508 #窗口高度 size width, height scoreNone #分数…

php fsockopen解决办法

最近研究php多线程的问题&#xff0c;发现中文资源少的可怜&#xff0c;仅有的几篇文章被转了又转&#xff0c;但文中内容价值有限。搜索过程中发现国外很多网站引用的一篇文章写的不错&#xff0c;所以翻译过来。版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超…

深入浅出JVM的锁优化案例

锁优化适应性自旋&#xff08;Adaptive Spinning&#xff09;线程阻塞的时候&#xff0c;让等待的线程不放弃cpu执行时间&#xff0c;而是执行一个自旋(一般是空循环)&#xff0c;这叫做自旋锁。自旋等待本身虽然避免了线程切换的开销&#xff0c;但它是要占用处理器时间的&…

DOMContentLoaded 与onload区别以及使用

一、何时触发这两个事件&#xff1f; 1、当 onload 事件触发时&#xff0c;页面上所有的DOM&#xff0c;样式表&#xff0c;脚本&#xff0c;图片&#xff0c;flash都已经加载完成了。 2、当 DOMContentLoaded 事件触发时&#xff0c;仅当DOM加载完成&#xff0c;不包括样式表&…

php-fpm – 配置详解

http://duyongguang.blogbus.com/logs/156375484.html php5.3自带php-fpm /usr/local/php/etc/php-fpm.conf pid run/php-fpm.pidpid设置&#xff0c;默认在安装目录中的var/run/php-fpm.pid&#xff0c;建议开启 error_log log/php-fpm.log错误日志&#xff0c;默认在安装目…

真香!Vision Transformer 快速实现 Mnist 识别

作者 | 李秋键出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;引言&#xff1a;基于深度学习的方法在计算机视觉领域中最典型的应用就是卷积神经网络CNN。CNN中的数据表示方式是分层的&#xff0c;高层特征表示依赖于底层特征&#xff0c;由浅入深抽象地提取高级特征…

(二十一)数组的初始化

class Demo3 {public static void main(String[] args) {//数组的初始化int[] a new int[] {12,13,14,15};int[] b {12,13,14,15};//数组的便利for(int i 0;i<4;i) {System.out.println(a[i]);}for(int i 0;i<b.length;i) {System.out.println(b[i]);}} }转载于:http…

深入探讨PHP中的内存管理问题

一、 内存在PHP中&#xff0c;填充一个字符串变量相当简单&#xff0c;这只需要一个语句"&#xff1c;?php $str hello world ; ?&#xff1e;"即可&#xff0c;并且该字符串能够被自由地修改、拷贝和移动。而在C语言中&#xff0c;尽管你能够编写例如"char …

介绍一个效率爆表的数据采集框架

作者 | 俊欣来源丨关于数据分析与可视化今天我们来聊一下如何用协程来进行数据的抓取&#xff0c;协程又称为是微线程&#xff0c;也被称为是用户级线程&#xff0c;在单线程的情况下完成多任务&#xff0c;多个任务按照一定顺序交替执行。那么aiohttp模块在Python中作为异步的…

最多显示6行并且最多显示三条文本

为什么80%的码农都做不了架构师&#xff1f;>>> private void setCommentContent(ViewHolder vh, String feedId, int commentNum, ArrayList<CommentItem> comment_lists){if(commentNum < 0 || comment_lists null || comment_lists.isEmpty()){for(in…

【刷算法】LeetCode- 两数之和

题目描述 给定一个整数数组和一个目标值&#xff0c;找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案&#xff0c;且同样的元素不能被重复利用。 示例: 给定 nums [2, 7, 11, 15], target 9因为 nums[0] nums[1] 2 7 9 所以返回 [0, 1] 复制代码分析 第…

栈区和堆区内存分配区别

一直以来总是对这个问题的认识比较朦胧&#xff0c;我相信很多朋友也是这样的&#xff0c;总是听到内存一会在栈上分配&#xff0c;一会又在堆上分配&#xff0c;那么它们之间到底是怎么的区别呢&#xff1f;为了说明这个问题&#xff0c;我们先来看一下内存内部的组织情况&…

高精度进制转换

高精度进制转换&#xff1a; 对于普通的不是非常大的数的相互转换&#xff0c;我们一般採用不断模取余的方法&#xff0c;比如&#xff1a;将10进制数m转换成n进制数&#xff0c;则对m模n取余就可以。可是&#xff0c;假设是一个有几百、几千或者很多其它位的大数呢&#xff1f…

远程办公,你希望在家工作几天?

受疫情影响&#xff0c;员工的工作方式不得不发生改变。在过去短短的几个月内&#xff0c;远程办公从偶然一次变成了常态化。随着疫情的反复&#xff0c;远程办公再次成为了许多企业的选择。3月份携程正式启动了“32”混合办公模式&#xff0c;即每周有1-2天&#xff0c;员工可…

python爬虫日志(9)爬取代理

2019独角兽企业重金招聘Python工程师标准>>> 话不多说&#xff0c;直接上代码&#xff0c;很简单&#xff0c;很容易看懂 import requests from bs4 import BeautifulSoup import randomdef get_ip_list():print("正在获取代理列表...")ip_url http://ww…

使php支持mbstring库以及使用

1.执行yum install php-mbstring2. 修改php.ini (这一步非常重要, 部分lxadmin版本无法自动修改)echo ‘extensionmbstring.so’ >>/etc/php.ini #更具php安装目录而定3. 重启web service如果是apache: service httpd restart方法二&#xff1a;php 5.36安装目录&#xf…

仿余额宝数字跳动效果 TextCounter

1、TextCounter 效果 2、TextCounter 说明 每次打开余额宝第一件事情就去看看有多少钱&#xff0c;最炫的就是看着钱在跳动相当的舒服&#xff0c;今天放出这个效果。 温馨提示&#xff1a;支持的Android版本最低的是Android 4.0.0 IceCreamSandwich &#xff08; API等级14 &a…