3

我正在尝试通过经典的 asp 记录集执行以下查询 -

SQL = "Select P_Name as P_Name, P_Description as P_Description 
       from L_PagePermission 
       inner join A_Permission on p_permissionID = pp_PermissionID 
       inner join A_Page on P_PageID = PP_PageID 
       where P_PageID = 85 
       order by p_Name"   

虽然我遇到了权限问题。所以我收到的错误是 -

用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序错误“80040e09”

[Microsoft][ODBC SQL Server 驱动程序][SQL Server]对对象 'A_Permission'、数据库 'HRWB_3_0'、架构 'dbo' 的 SELECT 权限被拒绝。

我将如何在不更改权限设置的情况下执行此查询。如何使用存储过程来做到这一点?(有人也可以提供一个例子)

我无法更改我必须处理的数据库设置。我查看了很多网站文件,它似乎主要依赖于存储过程。

4

2 回答 2

5

L_PagePermission除非您将和A_Permission表的选择访问权限授予您用于连接到数据库的登录名,或者除非您使用已经具有选择访问权限的其他登录名,否则您将无法绕过该权限错误表。

另一种方法是编写一个新的存储过程并授予对该存储过程的 EXECUTE 访问权限。在任何一种情况下授予权限的 SQL 都很简单:

授予对表的 SELECT 访问权限: GRANT SELECT ON [TableName] TO [loginName]

授予对存储过程的 EXECUTE 访问权限: GRANT EXECUTE ON [procedureName] TO [loginName]

另一种可行但具有明显安全隐患的方法是将您正在使用的登录名添加到该数据库的 db_owner 角色。这应该可行,但除非您对存在的安全风险感到满意,否则不建议这样做。

于 2011-06-27T04:31:51.747 回答
0

如果您没有从表中选择的权限,那么除了作为有权从表中选择的用户连接到 DBMS 之外,没有其他方法可以解决没有权限的问题。这就是权限系统的重点——防止未经授权的人做他们不允许做的事情。

于 2011-06-27T04:32:04.260 回答