仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 874|回复: 7
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之修正SQL Server 2005实行情况

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:17:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQLAB公司的一个高级开发者者表示,“这个特点使得MySQL可以根据你当前的系统的需要来进行调整。”  实行情况是SQLServer中设定用户权限的认证体例,比方,当您登录到SQLServer的时分,登录账户就被付与了必定的权限,个中大概包含登录的功效、会见数据库和在数据库中实行某些操纵的功效。
  SQLServer2005包括了EXECUTEAS语句,经由过程利用EXECUTEAS语句,您能够为批处置和历程转换实行情况,如许,挪用该批处置或历程的用户就能够利用分歧的权限来操纵了。
  一切权链
  在我正式解说SQLServer2005中实行情况的成绩之前,先来复杂地说说一切权链的事情道理。
  当用户实行一个存储历程的时分(假定该用户具有实行该存储历程的权限),SQLServer将该存储历程的一切者与这个存储历程所触及到的工具的一切者举行对照,假如他们的一切者不异,那末就不用对这些援用工具的权限举行评价了。
  以是,假如用户Tim取得了存储历程usp_ProcedureChain的权限,而usp_ProcedureChain存储历程的一切者是dbo,那末,假如dbo还同时具有usp_ProcedureChain所挪用的其他存储历程,那末Tim在实行这个存储历程的时分就不会呈现毛病。
  实行情况的转换
  在SQLServer2000中,您可使用SETUSER命令来摹拟SQL用户的实行情况,但成绩在于,只要体系办理员大概数据库的一切者才干利用这个命令,并且Windows账户也不克不及利用该命令。
  在SQLServer2005中,EXECUTEAS语句能够替换SETUSER来改动存储历程、触发器、批处置大概函数的实行情况。假如实行情况酿成了别的一个用户,那末SQLServer将反省该用户的权限。假如您必要在创立或修正一个存储历程或函数的时分指定EXECUTEAS语句,您必要具有IMPERSONATE的权限,和创立该工具的权限。
  实例
  正如我方才所先容的一样,改动存储历程的实行情况十分有效,接上去我将经由过程实例来说解怎样完成这一功效。在这个例子中,您会看到怎样利用EXECUTEAS将没有切实权限的利用者摹拟为一切者对表格举行拔出操纵。
  在第一行语句中,我利用了REVERT命令,如许,您就能够完全地前往到例子中,而不用忧虑必要扫除任何工具。
REVERT
GO  鄙人面的代码的第七行,我利用了扫除语句,如许能够反省我在随后的例子中要利用的工具是不是已存在,假如已存在,就将其扫除。
IFOBJECT_ID(usp_InsertMyTable,P)>0
DROPPROCEDUREusp_InsertMyTable
GO
IFOBJECT_ID(TableOwnerSchema.MyTable,U)>0
DROPTABLETableOwnerSchema.MyTable
GO
IFEXISTS
(SELECT*FROMsys.schemasWHEREname=NTableOwnerSchema)
DROPSCHEMA[TableOwnerSchema]
IFEXISTS
(SELECT*FROMsys.database_principalsWHEREname=NBaseUser)
DROPUSERBaseUser
IFEXISTS
(SELECT*FROMsys.server_principalsWHEREname=NBaseUser)
DROPLOGINBaseUser
IFEXISTS
(SELECT*FROMsys.database_principalsWHEREname=NTableOwner)
DROPUSERTableOwner
IFEXISTS
(SELECT*FROMsys.server_principalsWHEREname=NTableOwner)
DROPLOGINTableOwner  以下的剧本语句创立了两个登录名和数据库的用户账户,注重,CHECK_EXPIRATION和CHECK_POLICY语句,这两条语句是SQLServer2005中新呈现的。这些语句告知SQLServer不要对这个用户账户强迫实行暗码停止刻日战略,同时也不要举行任何范例的暗码战略反省,关于强迫平安战略而言,这些长短常无效的办法。
CREATELOGIN[BaseUser]WITHPASSWORD=Nbaseuser,
DEFAULT_DATABASE=[TRS],
CHECK_EXPIRATION=OFF,CHECK_POLICY=OFF
GO
CREATEUSER[BaseUser]FORLOGIN[BaseUser]
GO
CREATELOGIN[TableOwner]WITHPASSWORD=Ntableowner,
DEFAULT_DATABASE=[TRS],
CHECK_EXPIRATION=OFF,CHECK_POLICY=OFF
GO
CREATEUSERTableOwnerFORLOGINTableOwner
GO  在SQLServer2005中,形式不再是和数据库用户不异的事变了,关于所包括的工具而言,它处于完整分歧的称号空间。用户和形式的分别是SQLServer2005中的一猛进步,如许做使工具的一切权能够分别,并且比SQLServer2000更容易于办理,以下的语句创立了我们将要利用的数据库形式:
CREATESCHEMA[TableOwnerSchema]AUTHORIZATION[TableOwner]
GO
NowIenableloginssotheycanbeused:
ALTERLOGIN[TableOwner]ENABLE
ALTERLOGIN[BaseUser]ENABLE
GO
GRANTCREATETABLETOTableOwner
GO  起首,我利用了EXECUTEAS命令,我将以后的实行情况设定为TableOwner,在运转了这个命令以后,一切的权限评价将以TableOwner运转,而之前的体系办理员权限将不再合用。
EXECUTEASUSER=TableOwner
GO  运转这个语句就可以够标明如今的实行情况是TableOwner:
SELECTSESSION_USER
GO  这个剧本将在TableOwnerSchema的形式中创立一个名为MyTable的表格,由于我已付与了该用户CREATETABLE的权限,以是TableOwner能够实行这条语句。
CREATETABLETableOwnerSchema.MyTable
(
Field1INT
)
GO  当我运转REVERT语句的时分,能够在实行情况链中回退一步,在SQLServer2005中,实行情况是能够嵌套的,以是假如您在统一个数据库毗连中有良多用户在运转,您大概必要屡次实行该语句以前往到原始的登录情况。
REVERT
GO
SELECTSESSION_USER
GO  如今我要对新的表格举行疾速选择以确认它的存在:
SELECT*FROMTableOwnerSchema.MyTable
GO  以下的剧本创立了一个历程能够拔出新的TableOwnerSchema.MyTable表格,注重我在历程界说中利用了WITHEXECUTEASTableOwner语句,这意味着该历程被实行的时分,它将在TableOwner的实行情况中被实行。
CREATEPROCEDUREusp_InsertMyTable
WITHEXECUTEASTableOwner
AS
BEGIN
INSERTINTOTableOwnerSchema.MyTable(Field1)VALUES(8)
END
GO  我还能够将实行权限付与一个用户账户,在这类情形下,我利用之前创立的名为BaseUser的用户。
GRANTEXECONusp_InsertMyTableTOBaseUser
GO  接上去,我将实行情况转换为BaseUser并实验运转存储历程:
EXECUTEASUSER=BaseUser
GO
EXECusp_InsertMyTable
GO  如今我能够向TableSchema.MyTable表格中增加纪录了,由于在这个过程当中TableOwner同意我如许做,而BaseOwner并没有明白的权限能够向该表格增加纪录,以是该用户的任未尝试城市招致毛病的产生。为了演示这个成绩,能够运转以下的剧本,该剧本改动了我们方才的历程,改成运转在挪用者的实行情况中。
REVERT
GO
ALTERPROCEDUREusp_InsertMyTable
AS
BEGIN
INSERTINTOTableOwnerSchema.MyTable(Field1)VALUES(8)
END
GO
EXECUTEASUSER=BaseUser
GO
EXECusp_InsertMyTable
GO
REVERT  开辟者和数据库办理员会发明在实行存储历程的时分转换权限十分有效,特别是您处置TRUNCATETABLE语句的时分,这个办法能帮上年夜忙,由于TRUNCATETABLE并没有能够指定的权限。您能够将权限付与将要举行截取表格操纵的用户,然后在操纵停止的时分再将原本的权限设定恢复就能够了。
有的时候,一些缺失的功能可以通过别的办法来实现,例如,在MySQL4.1以前,你可以通过使用join方法来替代子查询的功能。在MySQL5.0中,大多数关系型数据库所要求的功能已经都具备。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-19 06:47:34 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
海妖 该用户已被删除
板凳
发表于 2015-1-24 16:00:14 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
莫相离 该用户已被删除
地板
发表于 2015-2-2 09:00:16 | 只看该作者
光写几个SQL实在叫无知。
第二个灵魂 该用户已被删除
5#
 楼主| 发表于 2015-2-7 17:59:33 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
谁可相欹 该用户已被删除
6#
发表于 2015-2-22 20:17:09 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
7#
发表于 2015-3-7 02:31:20 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
飘灵儿 该用户已被删除
8#
发表于 2015-3-14 10:28:49 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-22 11:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表