快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐官网下载安装_龟发之家论坛



履行情况是SQL Server中设定用户权限的认证要领,例如,当您登录到SQL Server的时刻,登录账户就被付与了必然的权限,此中可能包括登录的功能、造访数据库以及在数据库中履行某些操作的功能。

SQL Server 2005包孕了EXECUTE AS语句,经由过程应用EXECUTE AS语句,您可以为批处置惩罚和历程转换履行情况,这样,调用该批处置惩罚或历程的用户就可以应用不合的权限来操作了。

所有权链

在我正式解说SQL Server 2005中履行情况的问题之前,先来简单地说说所有权链的事情道理。

当用户履行一个存储历程的时刻(假定该用户拥有履行该存储历程的权限),SQL Server将该存储历程的所有者与这个存储历程所涉及到的工具的所有者进行比较,假如他们的所有者相同,那么就不必对这些引用工具的权限进行评估了。

以是,假如用户Tim得到了存储历程usp_ProcedureChain的权限,而usp_ProcedureChain存储历程的所有者是dbo,那么,假如dbo还同时拥有usp_ProcedureChain所调用的其他存储历程,那么Tim在履行这个存储历程的时刻就不会呈现差错。

履行情况的转换

在SQL Server 2000中,您可以应用SETUSER敕令来模拟SQL用户的履行情况,但问题在于,只有系统治理员或者数据库的所有者才能应用这个敕令,而且Windows账户也不能应用该敕令。

在SQL Server 2005中,EXECUTE AS语句可以替代SETUSER来改变存储历程、触发器、批处置惩罚或者函数的履行情况。假如履行情况变成了别的一个用户,那么SQL Server将反省该用户的权限。假如您必要在创建或改动一个存储历程或函数的时刻指定EXECUTE AS语句,您必要具备IMPERSONATE的权限,以及创建该工具的权限。

实例

正如我刚才所先容的一样,改变存储历程的履行情况异常有用,接下来我将经由过程实例来解说若何实现这一功能。在这个例子中,您会看到若何应用EXEC葡京娱乐官网下载安装UTE AS将没有确切权限的应用者模拟为所有者对表格进行插入操作。

在第一行语句中,我应用了REVERT敕令,这样,您就可以完备地返回到例子中,而不必担心必要清除任何工具。

REVERT

GO

鄙人面的代码的第七行,我应用了清除语句,这样可以反省我在随后的例子中要应用的工具是否已经存在,假如已经存在,就将其清除。

IF OBJECT_ID('usp_InsertMyTable','P')>0

DROP PROCEDURE usp_InsertMyTable

GO

IF OBJECT_ID('TableOwnerSchema.MyTable','U')>0

DROP TABLE TableOwnerSchema.MyTable

GO

IF EXISTS

(SELECT * FROM sys.schemas WHERE name = N'TableOwnerSchema')

DROP SCHEMA [TableOwnerSchema]

IF EXISTS

(SELECT * FROM sys.database_principals WHERE name = N'BaseUser')

DROP USER BaseUser

IF EXISTS

(SELECT * FROM sys.server_principals WHERE name = N'BaseUser')

DROP LOGIN BaseUser

IF EXISTS

(SELECT * FROM sys.database_principals WHERE name = N'TableOwner')

DROP USER TableOwner

IF EXISTS

(SELECT * FROM sys.server_principals WHERE name = N'TableOwner')

DROP LOGIN TableOwner

以下的脚本语句创建了两个登录名和数据库的用户账户,留意,CHECK_EXPIRATION和CHECK_POLICY语句,这两条语句是SQL Server 2005中新呈现的。这些语句奉告SQL Server不要对这个用户账户强制履行密码截止刻日策略,同时也不要进行任何类型的密码策略反省,对付强制安然策略而言,这些是异常有效的措施。

CREATE LOGIN [BaseUser] WITH PASSWORD=N'baseuser',

DEFAULT_DAT葡京娱乐官网下载安装ABASE=[TRS],

CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

CREATE USER [BaseUser] FOR LOGIN [BaseUser]

GO

CREATE LOGIN [TableOwner] WITH PASSWORD=N'tableowner',

DEFAULT_DATABASE=[TRS],

CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

CREATE USER TableOwner FOR LOGIN TableOwner

GO

在SQL Server 2005中,模式不再是和数据库用户相同的工作了,对付所包孕的工具而言,它处于完全不合的名称空间。用户和模式的分离是SQL Server 2005中的一大年夜进步,这样做使工具的所有权可以分离,而且比SQL Server 2000更易于治理,以下的语句创建了我们将要应用的数据库模式:

CREATE SCHEMA [TableOwnerSchema] AUTHORIZATION [TableOwner]

GO

Now I enable logins so they can be used:

ALTER LOGIN [TableOwner] ENABLE

ALTER LOGIN [BaseUser] ENABLE

GO

GRANT CREATE TABLE TO TableOwner

GO

首先,我应用了EXECUTE AS敕令,我将当前的履行情况设定为TableOwner,在运行了这个敕令之后,所有的权限评估将以TableOwner运行,而曩昔的系统治理员权限将不再适用。

EXECUTE AS USER = 'TableOwner'

GO

运行这个语句就能够注解现在的履行情况是葡京娱乐官网下载安装TableOwner:

SELECT SESSION_USER

GO

这个脚本将在TableOwnerSchema的模式中创建一个名为MyTable的表格,由于我已经付与了该用户CREATE TABLE 的权限,以是TableOwner可以履行这条语句。

CREATE TABLE TableOwnerSchema.MyTable

(

Field1 INT

)

GO

当我运行REVE葡京娱乐官网下载安装RT语句的时刻,可以在履行情况链中回退一步,在SQL Server 2005中,履行情况是可以嵌套的,以是假如您在同一个数据库连接中有很多用户在运行,您可能必要多次履行该语句以返回到原始的登录情况。

REVERT

GO

SELECT SESSION_USER

GO

现在我要对新的表格进行快速选择以确认它的存在:

SELECT * FROM TableOwnerSchema.MyTable

GO

以下的脚本创建了一个历程可以插入新的TableOwnerSchema.MyTable表格,留意我在历程定义中应用了WITH EXECUTE AS 'TableOwner'语句,这意味着该历程被履行的时刻,它将在TableOwner的履行情况中被履行。

CREATE PROCEDURE usp_InsertMyTable

WITH EXECUTE AS 'TableOwner'

AS

BEGIN

INSERT葡京娱乐官网下载安装 INTO TableOwnerSchema.MyTable(Field1)VALUES(8)

END

GO

我还可以将履行权限付与一个用户账户,在这种环境下,我应用曩昔创建的名为BaseUser的用户。

GRANT EXEC ON usp_InsertMyTable TO BaseUser

GO

接下来,我将履行情况转换为BaseUser并考试测验运行存储历程:

EXECUTE AS USER = 'BaseUser'

GO

EXEC usp_InsertMyTable

GO

现在我可以向TableSchema.MyTable表格中添加记录了,由于在这个历程中TableOwner容许我这样做,而BaseOwner并没有明确的权限可以向该表格添加记录,以是该用户的任何考试测验都邑导致差错的发生。为了演示这个问题,可以运行以下的脚本,该脚本改变了我们刚才的历程,改为运行在调用者的履行情况中。

REVERT

GO

ALTER PROCEDURE usp_InsertMyTable

AS

BEGIN

INSERT INTO TableOwnerSchema.MyTable(Field1)VALUES(8)

END

GO

EXECUTE AS USER = 'BaseUser'

GO

EXEC usp_InsertMyTable

GO

REVERT

开拓者和数据库治理员会发明在履行存储历程的时刻转换权限异常有用,尤其是您处置惩罚TRUNCATE TABLE语句的时刻,这个措施能帮上大年夜忙,由于TRUNCATE TABLE并没有可以指定的权限。您可以将权限付与将要进行截取表格操作的用户,然后在操作停止的时刻再将原有的权限设定规复就可以了。

您可能还会对下面的文章感兴趣: