【问题标题】:classic asp recordset permissions problem经典的asp记录集权限问题
【发布时间】:2011-06-23 19:16:26
【问题描述】:

我正在尝试使用下面的 sql 字符串返回特定列的值,如果我将其更改为 sql = "select * from a_page"objRS("P_description") 它会返回值,但由于某种原因,我的页面在使用下面时不会加载代码。

更新:我关闭了下一个错误恢复,我收到的错误是选择权限被拒绝。如何使用下面的代码授予自己权限?

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 = 84 order by p_Name"

Page_ID = 84

connectionstring = obj_ADO.getconnectionstring

Set objCon = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objCon.Open connectionstring

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 = 84 order by p_Name"

objRS.open SQL, objCon

objRS.MoveFirst
while not objRS.EOF
    response.Write objRS("P_Name")
    objRS.MoveNext
wend

objRS.close
objCon.close

【问题讨论】:

  • 问题一:P_Description的值是否包含特殊字符如、&,可能被解释为HTML?问题 2:您是否在脚本中使用“On Error Resume Next”?如果是,如果您注释掉该行,您可能会收到更好的错误消息。
  • p_description 中确实包含下划线,但仅此而已
  • 我删除了 on error resume next,我收到的错误是 ]SELECT permission denied on object 'A_Permission', database。谢谢,错误恢复下一个是一个大问题
  • 您使用的是什么数据库类型?连接字符串是什么样的(实际的 u/p 和服务器名称已编辑 natch。)
  • 其 Microsoft sql 服务器的连接字符串与此类似“Provider=SQLOLEDB.1;Password=xxxx;Persist Security Info=True;User ID=xxxx;Initial Catalog=xxxx;Data Source =xxxx"

标签: sql-server asp-classic database-permissions


【解决方案1】:

您收到的错误加上您提到的有效代码意味着一件事:在L_PagePermission 表或A_Permission(或两者)上,传入连接字符串的用户没有读取权限。

要解决这个问题,您必须在连接字符串中传递“更强”的用户,或者通过 SQL Management Studio 等工具向用户授予对这些表的读取权限。

顺便说一句,由于明显的安全原因,您不能通过代码“授予自己权限” - 权限的存在是为了防止代码首先做某些事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2011-06-01
    相关资源
    最近更新 更多