MS Access直通查询调用SQL Server存储过程:管理员正常普通用户报3325错
底层对象权限缺失:即便已授予存储过程执行权限和数据库读写权限,若存储过程引用了非dbo架构、其他数据库的表/视图/函数,普通用户或其所属AD组可能没有这些依赖对象的
SELECT权限。SQL Server执行存储过程时默认使用执行者权限访问底层对象,需明确给用户/AD组授予这些对象的访问权限。存储过程SET选项未配置:如果存储过程开头未添加
SET NOCOUNT ON;,执行时会额外返回“影响行数”的消息,Access可能无法正确解析结果集。管理员账号的会话默认设置可能忽略这类消息,但普通用户环境会触发3325错误,需在存储过程开头加入该语句。AD组权限未生效:加入AD安全组后,用户当前会话可能未同步最新权限。需让用户注销重新登录,或在SQL Server执行
EXEC sp_helplogins 'DOMAIN\用户名',确认AD组的权限已正确应用到用户账号。行级安全或数据过滤限制:存储过程可能包含数据过滤逻辑,普通用户因行级安全策略或数据权限,无法访问满足条件的数据,导致执行后无结果返回。需检查是否存在行级安全,或存储过程中的
WHERE条件是否与用户权限关联。ODBC连接属性不一致:普通用户的ODBC数据源设置与管理员存在差异,比如默认数据库未指定、ANSI相关选项未开启,会导致结果集返回异常。需确保两者的ODBC连接属性(如默认数据库、使用ANSI引号、驱动版本)完全一致。
多结果集处理问题:若存储过程返回多个结果集(如先执行修改语句再返回查询结果),Access直通查询可能无法正确识别。需调整存储过程,确保仅返回一个明确的结果集,或配合
SET NOCOUNT ON确保结果集为第一个返回内容。
内容的提问来源于stack exchange,提问作者Greg

