不知道给我搞了什么操作,结果下次开机,用vb编好的程序执行到OPEN TABLE(EXEC   sp_helprotect   '数据库1',   '用户1') (当然里面那些中文字实际上不是中文字的,解释而已),就报错“多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。”在sql2005里面新建查询执行,则返回信息:消息 15330,级别 11,状态 1,过程 sp_helprotect,第 291 行
没有要报告的匹配行。上网查过,全部都解释是:引起这个问题的原因简单的说就是数据库的字段类型不匹配或者字符个数超出了数据库的字段的最大限制个数。但很明显,我又不是执行插入、修改等对表字段操作的语句,只是查询用户对表所拥有的权限。执行 EXEC   sp_helprotect   null,null,dbo 没问题
执行 EXEC   sp_helprotect   null,null,'用户1' 报同样错误消息 15330,级别 11,状态 1,过程 sp_helprotect,第 291 行
没有要报告的匹配行。搞了一个晚上都找不出原因来,甚至将以前的整个SQL文件夹备份也覆盖了,还是不行。请各位指教,这个问题解决不了,我的编程工作便无法进行了~ 我使用的是SQL2005。谢谢各位。

解决方案 »

  1.   


    [@grantorname =] 'grantor'是已授权的安全帐户的名称。grantor 的数据类型为 sysname,默认值为 NULL,这个默认值将返回数据库中任何安全帐户所授权限的所有信息。当指定 Windows NT 用户时,请指定该 Windows NT 用户在数据库中可被识别的名称(用 sp_grantdbaccess 添加)。
    执行 EXEC  sp_helprotect  null,null,'用户1'??是否是授权的帐户名称,再试试其他用户
      

  2.   


    dbo可以,其他我自己建立的2个都不可以以前可以的,不知道我搞了什么操作后就报错了...
      

  3.   

    sys不可以,我自己建立的2个账户也不可以,dbo可以,其他的没试过MSDN上解释说:There are no matching rows on which to report.是什么原因呢?
      

  4.   

    这里有篇英文的问题解释,谁能大致解释一下,不要机器翻译,解决了马上给分了http://www.mssqltips.com/tip.asp?tip=1653
      

  5.   

    当然没有问题,数据库默认为dbo用户。
    EXEC sp_helprotect @grantorname = 'dbo'
    等价于
    EXEC  sp_helprotect  null,null,dbo 
    --try?
    EXEC sp_helprotect NULL, '用户1'
      

  6.   

    SELECT  
      s.name [Schema]
      , USER_NAME(dp.grantee_principal_id) [User]
      , permission_name
      , state_desc
    FROM sys.database_permissions dp
    JOIN sys.schemas s ON dp.major_id = s.schema_id 
    WHERE s.name='用户1'
      

  7.   

    --给出上面的查询结果
    --windows身份验证登录,执行以下语句:
    SELECT   s.name [Schema]
      , USER_NAME(dp.grantee_principal_id) [User]
      , permission_name
      , state_desc from sys.server_permissions  dp JOIN sys.schemas s ON dp.major_id = s.schema_id 
    WHERE s.name='用户1'
      

  8.   


    兄弟正确!!!
    是返回其权限的安全帐户名称
    [@username =] 'security_account'是返回其权限的安全帐户名称。security_account 的数据类型为 sysname,默认值为 NULL,这个默认值将返回当前数据库中所有的安全帐户。security_account 必须是当前数据库中的有效安全帐户。当指定 Microsoft® Windows NT® 用户时,请指定该 Windows NT 用户在数据库中可被识别的名称(用 sp_grantdbaccess 添加)。
      

  9.   

    EXEC  sp_helprotect  null,null,dbo 
    EXEC  sp_helprotect  null,'用户名,dbo
    中间的那个是被授权的名字,后面那个是向指定的被授权限用户进行授权的用户的名称。
    理解了!!
      

  10.   

    EXEC  sp_helprotect  null,'用户名',dbo