我的团队正在使用Oracle成员资格提供程序来帮助管理.NET 4,MVC3 Web应用程序的用户。我们最近发现,我们的客户端坚持认为拥有对象的模式与Web应用程序用于连接数据库的模式/用户不同。授予第二个模式的权限不是问题,但是我们如何配置成员资格提供程序以查找与其表,函数等连接用户不同的模式?
答案 0 :(得分:0)
同义词似乎是唯一的答案。我们没有使用所有成员资格提供程序的功能,但以下查询似乎足以生成我们需要的同义词:
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。此外,还需要在这些对象上授予适当的读写权限。
如果其他人有更好的东西,我很乐意将其标记为答案。