1

我用谷歌搜索,什么也没找到。短篇小说,我创建了一个用户并授予我 SyBase 中的一个表。但是当我尝试

select * from table1

它没有用。错误显示Permission denied: you don't have permission to select from "table1",我尝试像这样在表名之前添加 dbname,它可以工作:

select * from dbname.table1

我怀疑用户默认数据库是别的东西,所以我想将 dbname 设置为他的默认数据库。有人知道怎么做吗?

4

3 回答 3

2

这与数据库名称(或登录策略)无关。鉴于您的评论“dbname”实际上是拥有该表的用户,这就是正在发生的事情。

当您指定一个没有所有者的表名时,服务器必须弄清楚您指的是哪个表。它首先查找您拥有的具有该名称的表。如果找不到,它会查找您所属的任何组所拥有的表。我怀疑其中一个组有一个名为“table1”的表,您无权从中进行选择。

当您指定具有所有者的表名,服务器确切地知道要使用哪个表。由于您确实有权从该表中进行选择,因此您将获得所需的结果。

于 2013-07-24T14:10:31.277 回答
1

IQ 没有默认数据库/模式。相反,它使用登录策略。每个数据库都有一个分配给它的登录策略,可以更改。您还可以创建自定义登录策略。

当您在未指定登录策略的情况下创建用户帐户时,它会自动获取根登录策略。

有关详细信息,请查看以下 SAP Sybase IQ 文档:

IQ 简介:管理用户和组

系统管理员指南 V1:管理用户 ID 和权限

于 2013-07-24T13:22:28.650 回答
0

使用视图或过程是一种有用的方法。也就是说,要在 (IQ 15.x) 中建立“默认”模式,可以使用组。本质上,将组授予模式所有者并使个人登录帐户(或其他组)成为该组的成员。请注意,这只授予用户对模式的访问权限——也就是说,它消除了在对象前面加上模式/所有者名称的需要(除非存在只能通过显式 schema.object 命名解决的对象名称冲突)。这不包括授予权限。任何与表所有者相关的隐式权限都不会继承。但是,由于架构/所有者现在也是一个组,因此可以在该级别授予权限。

请参阅:http: //infocenter.sybase.com/help/topic/com.sybase.infocenter.dc00170.1540/doc/html/san1288042708174.html(管理用户 ID 和权限)。请注意:此材料通常需要仔细阅读和实验才能变得有用。

据我了解,这种方法是对 IQ 16 中新的基于角色的模型的补充(在功能上被替换)。但是,由于我仍然感觉到我的 IQ 16,可能还有很多话要说,而且我我还没准备好发表评论。

于 2013-08-06T13:50:59.517 回答