Oracle - 功能不起作用

2024-01-11

Oracle - 功能不起作用

所以我不知道我做错了什么。我已经花了几个小时了,非常感谢一些帮助。

所以基本上我有两张桌子,一张叫做student这是一个学生名单student_no是主键,另一个表称为enrol其中基本上包含了学生注册的课程列表。

所以我编写了一个函数来比较登录学生的用户名,在本例中是student_no,添加到学生列表并确保登录用户是学生。然后它比较student_noenrol表来查找用户注册的任何程序。所以本质上当我SELECT * FROM yaser.enrol(表所有者是 yaser)我应该只看到注册列表中的几条记录。相反,我收到错误:failed to execute policy function.

这是我的功能:

-- Create policy function to be called when 'ENROL' table is accessed
create or replace function f_policy_enrol (schema in varchar2, tab in varchar2)
-- Function will return a string that is used as a WHERE clause                       
return varchar2
as
 v_student_no     varchar2(10);
 is_student       number:=0;
 v_user           varchar2(100);
 out_string       varchar2(400) default '1=2 ';

begin
  -- get session user
  v_user := lower(sys_context('userenv','session_user'));

  -- Is the user a student?
  begin
    select student_no into v_student_no from student where lower(student_no) = v_user;
    is_student:=1;
  exception
    when no_data_found then
    v_student_no := 0;
  end;

  -- If it's a student, then they are only allowed to see their record only.
  if is_student = 1 then
     out_string := out_string||'or student_no = '||v_student_no||' ';
  end if;

  return out_string;
end;
/

这是我调用的策略:

begin
dbms_rls.add_policy('yaser',
                    'enrol',
                    'accesscontrol_enrol',
                    'yaser',
                    'f_policy_enrol',
                    policy_type => dbms_rls.context_sensitive);
end;
/

正如之前所说......我不确定我哪里错了。无论是在政策上还是在功能上。任何帮助将不胜感激!如果您有任何疑问,我很乐意在工作空闲时间立即回答!

提前致谢!

Yaser


的数据类型是什么student_no柱子?列名暗示它是一个NUMBER。但事实上你正在打电话lower对其进行比较并将其与会话用户进行比较意味着它是一个VARCHAR2.

假设student_no is a VARCHAR2,一个问题是您的谓词在值周围缺少单引号。如果v_student_no例如,“jcave”是您的out_string将会

1=2 or student_no = jcave

由于“jcave”没有被引用,Oracle 假定它必须是一个标识符,因此它在名为的表中查找列jcave。找不到这样的列,就会抛出错误。如果你在字符串两边加上单引号,你会更幸运

out_string := out_string||'or student_no = '''||v_student_no||''' ';

还可能存在其他错误。您是否尝试过手动调用该函数以查看它返回的确切内容?如果您在以下情况下手动调用了该函数session_user设置为“jcave”,您应该已经看到缺少单引号的结果。如果您复制并粘贴返回值并将其添加到您的SELECT声明,您会立即看到错误。您还可以查询v$vpd_policy如果您想避免手动调用该函数,则可以查看已添加到特定 SQL 语句中的特定策略谓词 - 当您尝试调试无法调试会话状态的 VPD 问题时,这非常有用轻松重现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle - 功能不起作用 的相关文章

随机推荐

  • 有没有办法用c3js更改标签?

    我正在使用新的c3js http c3js org 图书馆 有什么办法可以更改图表中某条数据的标签吗 我有一个条形图 其中每个条形都是一个美元价值 我希望每个条形的标签为 100 美元而不是 100 美元 如果我将值设置为 100 美元 则
  • OpenXML 替换所有文档中的文本

    我有下面的一段代码 我想用 NewText 替换文本 Text1 这样就可以了 但是 当我将文本 Text1 放入表格中时 该表格不再适用于表格内的 Text1 我想在所有文档中进行此替换 using WordprocessingDocum
  • initWithFrame 未调用,但 awakeFromNib 已调用

    我正在尝试对 NSOutlineView 进行子类化 这是我的代码 OutlineViewSublcas h import
  • 什么是uWSGI主模式?

    如果我只运行一个应用程序 在主模式下运行 uWSGI 有什么好处 主模式是否提供进程管理优势 使其比通过 Upstart 运行更可靠 upstart只是一个进程管理器 uWSGI master可以访问worker的很多内存区域 事实上恰恰相
  • 实体框架 - SaveChanges() 未获取生成的身份密钥

    我在我的项目中使用实体框架 这真是一场噩梦 我有一个 SQL 数据库 有一个名为 Form 的表 Form有一个ID 它是PK和Identity 它是自动增加的 这次我这样做 Dim form as int32 Dim dbform As
  • 如何使用 Altair 按日期时间值突出显示条形

    如同 https altair viz github io gallery bar chart with highlighted bar html https altair viz github io gallery bar chart w
  • 调用模板函数时出现意外输出

    下面的代码是我正在经历的 cpp 测验的一部分 include
  • pandas concat 列ignore_index 不起作用

    我正在尝试列绑定数据框 例如 R 的cbind 确实 并且与熊猫有问题concat as ignore index True似乎不起作用 df1 pd DataFrame A A0 A1 A2 A3 B B0 B1 B2 B3 D D0 D
  • 使用剪贴板的 C# 多线程应用程序

    我正在开发一个多线程应用程序 我面临着必须使用剪贴板的问题 我正在使用 Qlikview API 并且我需要将表格复制到 Excel 中 问题是我认为会发生什么是这样的 在线程 1 上 我打开 QW 文档并复制表格 在将其粘贴到 Excel
  • 我应该在我的应用程序中使用 iOS 4 新功能吗?为什么?

    我正在更新我的一个应用程序 但我遇到了一个困境 在我想添加 iOS 4 独特功能的地方 我别无选择 只能仅针对支持的设备实现它们 这里没有困境 困境是当我有两种方法可以达到相同的效果时 一种是 旧方式 另一种是 新方式 一个很好的例子是使用
  • 在 Git Bash 中显示 SSH 密钥文件

    如何查看 Git Bash 中使用了哪个 SSH 密钥文件 我尝试了 git config get all 但收到错误消息 错误 参数数量错误 用法 git config 选项 使用哪个 SSH 密钥不是由 Git 决定的 而是由 SSH
  • psql: FATAL: 用户 Windows 8 密码验证失败

    我在 Windows 上安装了 postgresql 安装时它要求为该帐户创建一个用户 这在我的计算机上创建了一个名为 postgres 的新 Windows 用户 我也为其创建了一个密码 现在我想在 Windows 命令行上运行 psql
  • fork 的 Maven 项目使用什么版本标签?

    我经常不得不 fork 一个使用 Maven 的 Java 项目 通常在 github 上 当我分叉项目并进行更改时 我通常希望将版本剪切到我自己的私有 但在互联网上 maven 存储库 因此 我的自定义版本的版本标签应该是什么的问题 我做
  • 动态加载多个 JS 文件并在所有文件准备就绪时触发回调

    我有几个 JS 和 CSS 文件 需要使用 JavaScript 动态附加到 DOM 所描述的方法here https www nczonline net blog 2009 07 28 the best way to load exter
  • C# 中的私有静态变量和线程安全

    我的一位同事在多线程 C 应用程序中编写了以下代码 public class1 private static partialClass var1 new partialNonStaticClass public static method1
  • java.lang.SecurityException:发送短信:uid 10282 没有 android.permission.SEND_SMS

    我的应用程序不断崩溃并出现以下错误代码 java lang SecurityException Sending SMS message uid 10282 does not have android permission SEND SMS
  • 内核死亡并退出代码 1(VS 代码)

    这是我在 vs code 的交互窗口中运行代码时显示的错误消息 C Users rohit AppData Roaming Python Python38 site packages traitlets traitlets py 2195
  • NSTextFinder + 以编程方式更改 NSTextView 中的文本

    我有一个 NSTextView 我想使用查找栏 文本可以选择 但不可编辑 我以编程方式更改文本视图中的文本 当 NSTextFinder 在文本更改后尝试选择下一个匹配项时 此设置可能会崩溃 NSTextFinder 似乎保留了增量匹配的过
  • 当我改变页面时cookie消失

    PHP 我在我的login php页面中以这种方式设置cookie setcookie cookie id id 我打印 cookie 并且看到正确的值 但是当我使用以下命令更改页面时 header login url 我丢失了所有 coo
  • Oracle - 功能不起作用

    Oracle 功能不起作用 所以我不知道我做错了什么 我已经花了几个小时了 非常感谢一些帮助 所以基本上我有两张桌子 一张叫做student这是一个学生名单student no是主键 另一个表称为enrol其中基本上包含了学生注册的课程列表