在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权限赋给某一个用户的主要内容,如果未能解决你的问题,请参考以下文章