select * from table1
它不起作用。错误显示Permission denied: you don't have permission to select from "table1"
,我尝试在表名之前添加dbname,这样就可以了:
select * from dbname.table1
我怀疑用户默认数据库是其他东西所以我想将dbname设置为他的默认数据库。有人知道怎么做吗?
答案 0 :(得分:2)
这与数据库名称(或登录策略)无关。鉴于您的评论“dbname”实际上是拥有该表的用户,这就是正在发生的事情。
当您指定没有所有者的表名时,服务器必须确定您所指的表。它首先查找您拥有该名称的表。如果找不到,则查找您所属的任何组所拥有的表。我怀疑其中一个组有一个名为“table1”的表,您无权选择。
当您使用指定所有者的表名时,服务器确切地知道要使用哪个表。由于您执行有权从该表中进行选择,因此您可以获得所需的结果。
答案 1 :(得分:1)
IQ没有默认数据库/模式。相反,它使用登录策略。每个数据库都有一个分配给它的登录策略,可以对其进行更改。您还可以创建自定义登录策略。
创建没有指定登录策略的用户帐户时,它会自动获取root登录策略。
有关更多信息,请查看以下SAP Sybase IQ文档:
答案 2 :(得分:0)
使用视图或过程是一种有用的方法。也就是说,要在(IQ 15.x)中建立“默认”模式,可以使用组。实质上,一个授予组架构所有者的组,并使该组的各个登录帐户(或其他组)成员。请注意,这只允许用户访问模式 - 也就是说,它不需要在模式/所有者名称前面添加对象(除非有对象名称冲突只能通过显式schema.object命名解析)。这不包括授予权限。隐式表所有者相关权限都不会继承。但是,由于架构/所有者现在也是一个组,因此可以在该级别授予权限。
请参阅:http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc00170.1540/doc/html/san1288042708174.html(管理用户ID和权限)。请注意:这种材料在变得有用之前通常需要仔细阅读和实验。
据我了解,这种方法是对智商16中新的基于角色的模型的补充(功能上的替代)。然而,由于我仍然感觉我的智商16,所以可能还有很多要说的,我还没准备好发表评论。