最近的工作当中遇到了一个小问题,就是成都网站建设的SQL账户密码失效了,使用service程序测试了一下,显示了如下的notice:
Message: System.Data.SqlClient.SqlException: Login failed for user `dcp_prod`.
Reason: The password of the account has expired.
显然,这个是因为密码失效了,dcp_prod这个账户使用了密码失效策略,打开数据库查看这个账户的属性,果然,Enforce password policy和Enforce password expiration这两个属性被选中了。
现在只需要重新设置一下密码就可以了。但是之后又出现了一个错误,提示如下:
System.Data.SqlClient.SqlException:
Login failed for user `dcp_prod` because the account is
currently locked out.
The system administrator can unlock it.
(该帐户当前被锁定。系统管理员可以解锁。)
成都网站建设该如何解决这个问题呢?locked out是锁住了,然后使用administrator站好去解锁,字面意思是这样的,照着提示区做,再次打开账户属性。
点击Status标签,果然Login is locked out属性被选中,取消选中,点击OK,回到程序中。奇怪了,还是上面的locked out提示,打开属性查看,这个属性又一次被选中了。这样连续来回了好几次都是这样,开始纳闷了。后来在网上查,网上说有其他用户尝试连接数据库,我恍然大悟,是那个service程序在跟我争夺数据库。这个service程序每3秒钟会连接一次数据库,进行相应的操作,在这中间如果尝试修改密码,账户会被锁定的。我Administrator tool->service中关掉程序,修改密码,重新打开程序,这个错误就消失了。
SQL的SET QUOTED_IDENTIFIER OFF语句的作用
使 Microsoft? SQL Server? 遵从关于引号分隔标识符和文字字符串的 SQL-92 规则。由双引号分隔的标识符可以是Transact-SQL 保留关键字,或者可以包含 Transact-SQL 标识符语法规则通常不允许的字符。
先看下面几个sql语句
SET QUOTED_IDENTIFIER ON
SELECT * FROM "USER" WHERE a=`netasp`
SET QUOTED_IDENTIFIER ON
SELECT * FROM [USER] WHERE a=`netasp`
SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER] WHERE a="netasp"
SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER] WHERE a= `netasp`
当在数据库中新建一个名字是USER的表的时候,常常会带来一些麻烦,因为USER是SQL中的关键字,但是上面的几个语句不会报错。再说一个概念:标示符是SQL中的中括号[]。
当SET QUOTED_IDENTIFIER值为ON时,双引号内的字符被当作是数据库对象。就是说双引号" "和标识符[]效果是一样样的,他们都表示引用的字符是数据库对象。单引号`表示字符串的边界。
当SET QUOTDE_IDENTIFIER OFF时,双引号被解释为字符串的边界,和单引号的作用是类似的。就是说双引号"不能当做标识符使用,但是可以当做字符边界,和单引号`的效果是一样样的。
成都网站建设总结:当SET QUOTED_IDENTIFIER ON " "等同于[ ] 表示数据库对象;当SET QUOTED_IDENTIFIER OFF " "等同于` `表示字符串边界;还有这里的双引号" 并不是两个单引号`合起来的,是shift+”打出来的,初学者可能会犯这样的错误。
本次我们成都网站建设主要为大家讲解了SQL账户被锁之后的处理办法以及SQL的SET QUOTED_IDENTIFIER OFF语句的都有上门作用,标题说了这是一篇学习SQL的笔记,内容写的可能有点乱,希望大家谅解,如有不同意见,欢迎大家跟我们成都网站建设有更多的交流。