【问题标题】:set user's default database/schema in Sybase IQ在 Sybase IQ 中设置用户的默认数据库/模式
【发布时间】:2013-07-23 09:48:58
【问题描述】:

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

select * from table1

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

select * from dbname.table1

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

【问题讨论】:

  • “dbname”真的是数据库名称,而不是拥有该表的用户的名称吗?
  • @GraemePerrow 是的,您是正确的.. dbname 是拥有该表的用户。我仍然想知道为什么..你怎么知道??

标签: database sybase sap-iq


【解决方案1】:

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

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

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

【讨论】:

  • 所以即使我改变存储过程也不能让它工作?我授予用户该表。任何替代解决方案?可能是我创建了一个名为table1 的视图,所以每次新用户从table1 中选择时,它都会转到dbname.table1。你认为它会起作用吗?我需要明天早上测试一下..
  • 创建视图可能是您的最佳选择。 create view table1 as select * from dbname.table1 有效地使“table1”成为“dbname.table1”的别名。
  • @Graeme 请你看看我的这个问题 - stackoverflow.com/questions/19299244/…
【解决方案2】:

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

当您创建用户帐户而不指定登录策略时,它会自动获取根登录策略。

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

Intro to IQ: Managing Users and Groups

System Admin Guide V1: Managing User IDs and Permissions

【讨论】:

    【解决方案3】:

    使用视图或过程是一种有用的方法。也就是说,要在 (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,可能还有很多话要说,我还没准备好发表评论。

    【讨论】:

      猜你喜欢
      • 2018-10-12
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2013-12-18
      • 2021-11-19
      • 1970-01-01
      • 2016-07-26
      • 2019-08-09
      相关资源
      最近更新 更多