不知道给我搞了什么操作,结果下次开机,用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。谢谢各位。
没有要报告的匹配行。上网查过,全部都解释是:引起这个问题的原因简单的说就是数据库的字段类型不匹配或者字符个数超出了数据库的字段的最大限制个数。但很明显,我又不是执行插入、修改等对表字段操作的语句,只是查询用户对表所拥有的权限。执行 EXEC sp_helprotect null,null,dbo 没问题
执行 EXEC sp_helprotect null,null,'用户1' 报同样错误消息 15330,级别 11,状态 1,过程 sp_helprotect,第 291 行
没有要报告的匹配行。搞了一个晚上都找不出原因来,甚至将以前的整个SQL文件夹备份也覆盖了,还是不行。请各位指教,这个问题解决不了,我的编程工作便无法进行了~ 我使用的是SQL2005。谢谢各位。
[@grantorname =] 'grantor'是已授权的安全帐户的名称。grantor 的数据类型为 sysname,默认值为 NULL,这个默认值将返回数据库中任何安全帐户所授权限的所有信息。当指定 Windows NT 用户时,请指定该 Windows NT 用户在数据库中可被识别的名称(用 sp_grantdbaccess 添加)。
执行 EXEC sp_helprotect null,null,'用户1'??是否是授权的帐户名称,再试试其他用户
dbo可以,其他我自己建立的2个都不可以以前可以的,不知道我搞了什么操作后就报错了...
EXEC sp_helprotect @grantorname = 'dbo'
等价于
EXEC sp_helprotect null,null,dbo
--try?
EXEC sp_helprotect NULL, '用户1'
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'
--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'
兄弟正确!!!
是返回其权限的安全帐户名称
[@username =] 'security_account'是返回其权限的安全帐户名称。security_account 的数据类型为 sysname,默认值为 NULL,这个默认值将返回当前数据库中所有的安全帐户。security_account 必须是当前数据库中的有效安全帐户。当指定 Microsoft® Windows NT® 用户时,请指定该 Windows NT 用户在数据库中可被识别的名称(用 sp_grantdbaccess 添加)。
EXEC sp_helprotect null,'用户名,dbo
中间的那个是被授权的名字,后面那个是向指定的被授权限用户进行授权的用户的名称。
理解了!!