在SYBASE中,如何把一个数据库的所有表的select权限赋给某一个用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SYBASE中,如何把一个数据库的所有表的select权限赋给某一个用户相关的知识,希望对你有一定的参考价值。

在SYBASE中,如何把一个数据库的所有表的select权限一次性赋给某一个用户,grant select on 数据库对象 to username 只能一次赋一个表的select权限

sybase如何查表名不太清楚
oracle中select table_name from tabs是查询表名的语句
然后可以
grant select on (select table_name from tabs) to user

你参考一下吧,帮不了你太多了
参考技术A grant 权限 on 表名 to 用户名
简单明了
参考技术B 用创建视图可以吧.自己百度下.本回答被提问者采纳

从 Sybase 数据库中,如何获取表描述(字段名称和类型)?

【中文标题】从 Sybase 数据库中,如何获取表描述(字段名称和类型)?【英文标题】:From a Sybase Database, how I can get table description ( field names and types)? 【发布时间】:2010-11-28 15:08:08 【问题描述】:

我可以访问命令行 isql,并且我喜欢获取给定数据库的所有表的元数据,可能在格式化文件中。我怎样才能做到这一点?

谢谢。

【问题讨论】:

我应该提一下,我对 sybase 数据库几乎一无所知。我正在寻找 sql 命令。 【参考方案1】:

检查sysobjects 和syscolumns 表。

Here 是 Sybase 系统表的示意图。

所有用户表列表:

SELECT * FROM sysobjects WHERE type = 'U'

您可以将“U”更改为其他对象:

C – 计算列 D - 默认 F – SQLJ 函数 L - 日志 N – 分区条件 P – Transact-SQL 或 SQLJ 过程 PR - 准备对象(由动态 SQL 创建) R - 规则 RI - 引用约束 S – 系统表 TR - 触发器 U – 用户表 V - 查看 XP – 扩展存储过程

表中的列列表:

SELECT sc.* 
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'

【讨论】:

这对于单表来说非常接近。我正在数据库的所有表上寻找相同的数据。 我知道的老问题,但是我如何为临时表获得相同的结果?我在 sysobjects 或 syscolumns 中找不到它。 如果您对 sysobjects 上的某些列缺乏权限(就像我一样),请将 SELECT * 替换为 SELECT sc.* 海报链接已损坏。 Sybase 在这个时候肯定是放弃软件(这显然不仅仅是因为这个)。【参考方案2】:

sp_help 是您正在寻找的。

来自sp_help 系统过程的 Sybase 在线文档:

说明

报告有关数据库对象(sysobjects 中列出的任何对象)、系统或用户定义的数据类型以及计算列和基于函数的索引的信息。列显示 optimistic_index_lock

语法

sp_help [objname]

[...]

这是 publishers 表的(部分)输出(从 Using sp_help on database objects 粘贴):

Name               Owner        Object_type     Create_date 
----------------   -----------  -------------   ------------------------------
publishers         dbo          user table      Nov 9 2004 9:57AM

(1 row affected)
Column_name Type     Length   Prec  Scale   Nulls   Default_name   Rule_name
----------- -------  ------   ----- ------- ------- -------------- ---------- 
pub_id      char          4    NULL  NULL        0  NULL           pub_idrule
pub_name    varchar      40    NULL  NULL        1  NULL           NULL
city        varchar      20    NULL  NULL        1  NULL           NULL
state       char          2    NULL  NULL        1  NULL           NULL
Access_Rule_name    Computed_Column_object     Identity
------------------- -------------------------  ------------
NULL                NULL                                  0
NULL                NULL                                  0
NULL                NULL                                  0
NULL                NULL                                  0

仍然引用Using sp_help on database objects:

如果您在不提供对象名称的情况下执行 sp_help,则生成的报告会显示 sysobjects 中的每个对象及其名称、所有者和对象类型。还显示了 systypes 中的每个用户定义的数据类型及其名称、存储类型、长度、是否允许空值以及绑定到它的任何默认值或规则。该报告还指出是否为表或视图定义了任何主键或外键列。

【讨论】:

为什么这个答案没有得到更多的支持?这是完美的解决方案。 我更喜欢这个解决方案,而不是查询专有的字典表,因为它看起来更简单、更健壮。你碰巧知道how to properly fetch all result sets from JDBC 链接不再适用于 sp_help。试过了,我的 sybase 版本说“错误:找不到过程 'sp_help'(DBD:准备失败)”【参考方案3】:

Sybase IQ:

describe table_name;

【讨论】:

在一个好的答案中总是需要添加一些代码解释。请参阅@Pascal 的答案以获得很好的答案,他在其中包含文档链接,并在此处复制相关信息。 您好,我认为 Sybase IQ 中不存在“describe”命令【参考方案4】:
     SELECT
DB_NAME() TABLE_CATALOG,
NULL TABLE_SCHEMA,
so.name TABLE_NAME,
sc.name COLUMN_NAME,
sc.colid ORDINAL_POSITION,
NULL COLUMN_DEFAULT,
CASE WHEN st.allownulls=1 THEN 'YES'
 ELSE 'NO'
END IS_NULLABLE,
st.name DATA_TYPE,
CASE WHEN st.name like '%char%' THEN st.length
END CHARACTER_MAXIMUM_LENGTH,
CASE WHEN st.name like '%char%' THEN st.length
END*2 CHARACTER_OCTET_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.length
END NUMERIC_MAXIMUM_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.prec
END NUMERIC_PRECISION,
NULL NUMERIC_PRECISION_RADIX,
CASE WHEN st.name in ('numeric','int') THEN st.scale
END NUMERIC_SCALE,
CASE WHEN st.name in ('datetime') THEN st.prec
END DATETIME_PRECISION,
NULL CHARACTER_SET_CATALOG,
NULL CHARACTER_SET_SCHEMA,
NULL COLLATION_CATALOG,
NULL COLLATION_SCHEMA,
NULL DOMAIN_CATALOG,
NULL DOMAIN_SCHEMA,
NULL DOMAIN_NAME
FROM 
sysobjects so
INNER JOIN 
syscolumns sc
ON sc.id = so.id
inner join systypes st on st.usertype = sc.usertype 
WHERE so.name = 'TableName'

【讨论】:

表名 'syscolumns' 不明确【参考方案5】:

您可以使用以下方法在数据库中的所有表中搜索列:

SELECT so.name 
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id 
WHERE sc.name = 'YOUR_COLUMN_NAME'

【讨论】:

【参考方案6】:

在查找用户表时,如果还想要表所有者名称,可以使用以下内容:

select su.name + '.' + so.name
from   sysobjects so,
       sysusers   su
where  so.type = 'U' and
       so.uid  = su.uid
order  by su.name,
          so.name

【讨论】:

【参考方案7】:

sp_tables 也可以在 isql 中使用。它为您提供当前数据库中的表列表。

【讨论】:

【参考方案8】:

如果你想使用命令行程序,但不限于使用 SQL,你可以使用SchemaCrawler。 SchemaCrawler 是开源的,可以生成纯文本、CSV 或 (X)HTML 格式的文件。

【讨论】:

【参考方案9】:

这里是获取元数据的不同方法。 这个非常有用的 SQL 命令以文本形式返回表/视图定义:

SELECT text FROM syscmets WHERE id = OBJECT_ID('MySchema.MyTable') ORDER BY number, colid2, colid

享受 帕特里克

【讨论】:

似乎适用于视图、触发器和存储过程,但不适用于表【参考方案10】:

在我使用的 Sybase 版本中,下面给出了选定表的列列表

select *
FROM sys.syscolumns sc
where tname = 'YOUR_TABLE_NAME'
--and creator='YOUR_USER_NAME' --if you want to further restrict tables
--according to the user name that created it

【讨论】:

我使用的版本是 SAP IQ 16 (Sybase 的新名称) select @@version; @@version SAP IQ/16.0.102.6.1386/20147/P/sp10.15... 您混淆了几件事... 1) Sybase 是一家拥有 4 种不同 RDBMS 产品(ASE、SQLAnywhere、IQ、Advantage)的公司的名称... 2) 大约 8 年之前 SAP 收购了 Sybase,在过去的 8 年中,SAP 慢慢地将“Sybase”名称替换为“SAP”; OP 已将问题标记为“sybase-ase”,意思是“Sybase ASE”;如今,“Sybase ASE”有几个名字……我们顽固的 ASE 用户称为“Sybase ASE”,其他人则称为“SAP ASE”; Sybase ASE(又名 SAP ASE)与 Sybase IQ(又名 SAP IQ)不同,即 ASE 和 IQ 是 2 个不同的 RDBMS 产品 感谢您提供背景信息。结果我用的Sybase产品是SAP IQ(Sybase IQ),不是ASE版本。【参考方案11】:

对于 Sybase ASE,sp_columns table_name 将返回您要查找的所有表元数据。

【讨论】:

【参考方案12】:

如果 Sybase 符合 SQL-92,则此信息存储在 INFORMATION_SCHEMA 表中。

因此,以下将为您提供任何符合 SQL-92 的数据库中的表和视图列表

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES

【讨论】:

不幸的是,事实并非如此...... Sybase ASE 和 Sybase SQL Anywhere 都带有自己的专有字典视图 @Lukas。我不敢苟同。我所说的并没有错。从您的陈述中得出的结论是 Sybase 不符合 SQL-92,而不是我的陈述不正确。 ;-) 如你所愿。但问题实际上是关于 Sybase,而不是 SQL 92......实际上是关于 Sybase ASE,即使 OP 没有明确说明...... 我认为你们俩都是对的 - Lukas 的“情况并非如此”可能指的是 Steve 的“如果 Sybase 符合 SQL-92”,是的,OP 将无法获取信息他想使用 Steve 的查询....虽然 Sybase(和其他供应商)还没有实现这一点,但很遗憾 -

以上是关于在SYBASE中,如何把一个数据库的所有表的select权限赋给某一个用户的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句 怎么把一个表的数据复制到另外一个表里面

如何查看数据库中的表?

sybase表结构导出方法

怎样导出sybase数据库的所有库结构和表结构的建库的sql语句

如何获取 sybase 表列名及其数据类型和顺序?

如何限制 Sybase 中返回的结果数量?