0

我的团队正在使用 Oracle Membership Provider 来帮助管理 .NET 4、MVC3 Web 应用程序的用户。我们最近发现,我们的客户坚持认为拥有对象的架构与 Web 应用程序用于连接数据库的架构/用户不同。授予第二个模式的权限不是问题,但是我们如何配置 Membership Provider 以在与连接用户不同的模式中查看其表、函数等?

4

1 回答 1

0

同义词似乎是唯一的答案。我们没有使用 Membership Provider 的所有功能,但以下查询似乎足以生成我们需要的同义词:

DECLARE
  CURSOR ora_obj_rows IS (SELECT * FROM ALL_OBJECTS WHERE OWNER = '&owner_user' AND OBJECT_NAME LIKE 'ORA_ASPNET%' AND OBJECT_TYPE IN ('TABLE', 'PACKAGE', 'FUNCTION'));
BEGIN
FOR ora_obj IN ora_obj_rows
LOOP
  EXECUTE IMMEDIATE 'CREATE SYNONYM "' || '&login_user' || '"."' || ora_obj.OBJECT_NAME || '" FOR "' || '&owner_user' || '"."' || ora_obj.OBJECT_NAME || '"';
END LOOP;
END;
/

&owner_user&login_user是在执行时填写的参数。(因为我们使用的是脚本,所以我们DEFINE在上面。)执行此查询的用户需要能够看到 ALL_OBJECTS 中的对象,并有权在登录用户上创建 SYNONYM。此外,需要对这些对象授予适当的读写权限。

如果其他人有更好的东西,我很乐意将其标记为答案。

于 2012-09-19T22:41:33.987 回答