RedShift GRANT简介

339 阅读4分钟

RedShift GRANT

RedShift GRANT简介

Redshift GRANT命令用于控制Amazon Redshift中用户和用户组对数据库及其对象的安全和访问。我们可以在命令中指定从数据库、表、列、模式、程序、函数或语言中读取或写入数据的选项。这些权限也可以用于创建表或视图,写入数据或从其中读取数据,甚至是删除表。与GRANT命令相反的是revoke命令,它可以从一个用户组和用户中删除分配的权限。

授予命令是如何工作的?

GRANT命令可以用来为当前数据库中的任何对象分配任何类型的操作权限。除此之外,它还可以将位于数据库外部的实体的权限分配给语法中指定有ON SCHEMA关键字的用户和用户组。除此以外,GRANT只能给存储过程分配EXECUTE权限。还有一件重要的事情要记住,GRANT权限不能用于为数据库的其他外部对象和事务块分配权限,这些对象从BEGIN关键字开始,以END关键字结束。

语法

Amazon Redshift中GRANT命令的语法如下:

`GRANT {{DELETE | UPDATE | SELECT | REFERENCES | INSERT | DROP} [, …] | ALL [ PRIVILEGES]}   ON {ALL TABLES IN SCHEM name of schema [, …] | [TABLE] name of table [, …]}   TO {GROUP name of the group | name of user [ WITH GRANT OPTION] | PUBLIC } [, …]`

`GRANT {{TEMPORARY | CREATE | TEMP} [, …] | ALL [PRIVILEGES]}   ON DATABASE name of database [, …] TO {GROUP name of group | PUBLIC | name of user [ WITH GRANT OPTION]}`

为了操纵用户或消费者的数据共享权限,我们可以使用SHARE权限和ALTER权限。消费者通过使用SHARE命令被分配或移除权限,而对于用户,我们可以使用ALTER权限。

以下是GRANT的语法,用于相同的情况:

`GRANT { SHARE | ALTER } ON DATASHARE name of the data share TO {GROUP name of the group | PUBLIC [, …] | name of the user [ WITH GRANT OPTION]}`

对于数据共享,你可以使用下面的命令:

`GRANT USAGE ON DATASHARE name of data share TO ACCOUNT number of account [, …] | NAMESPACE GUID of name space [, …]`

除了上述语法外,还有许多版本的GRANT语法,这取决于你想把哪个操作的权限分配给哪个数据库对象的用户。关于GRANT语法的完整官方参考,你可以参考这个链接。

下面给出了上述语法中使用的术语:

  • SELECT:该命令为从视图和表中选择的数据分配权限。
  • INSERT:该命令为插入数据到表或视图的表分配权限,甚至为COPY语句分配权限。
  • UPDATE:在给用户分配更新表或列或视图中的数据的权限之前,必须有SELECT命令的权限。
  • DELETE:该命令授予从表中删除任何现有数据的权限。这也需要SELECT权限。
  • REFERENCES:如果任何一个外键作为表的约束存在,那么我们需要分配表的权限,它指的是被引用的表。如果不是这样,那么该约束就不能在任何表上创建。
  • all [privileges]:这个子句将所有操作的权限分配给用户组或用户,以语句中指定的为准。关键字PRIVILEGE的使用是可选的,用于指定。
  • ALTER:当我们使用Lake形成时,我们可以使用alter命令,启用Amazon Web Service Glue Data Catalog进行修改。
  • DROP:如果我们在Amazon Redshift中分配了删除任何表的权限,我们就可以删除任何表。并且在使用AWS Glue Data Catalog中的湖泊形式时启用。
  • ON [TABLE] 表的名称:这个权限是在数据库对象上提供的,它可以是表或视图,关键字TABLE的说明是可选的。
  • WITH GRANT选项:这有助于指定用户可以被分配权限,以分配和授予数据库中其他实体的权限。然而,注意GRANT选项不能用于公共或用户组。

RedShift GRANT的例子

下面给出了RedShift GRANT的例子。

假设我们要授予名字为payal的用户在schema educba_articles的所有表中进行选择操作的权限。

为此,我们将使用以下命令。

代码:

`grant select on all tables in schema educba_articles to payal;`

输出

RedShift GRANT 1

让我们再考虑一个例子,我们将尝试为属于writer_group的用户组分配在educba_articles模式中的主题表中的drop权限。

代码

`grant drop on table educba_articles.topics to group writer_group;`

输出

RedShift GRANT 2

我们可以通过使用下面的命令来验证添加的权限。

代码

`SELECT   u.usename,   t.schemaname||'.'||t.tablename,   has_table_privilege(u.usename,t.tablename,'select') AS "SELECT permission Assigned"   FROM   pg_user u   CROSS JOIN   pg_tables t   WHERE   u.usename = payal   AND t.tablename = "topics";`

输出:我们可以使用下面的命令来验证添加的权限。

verify the privileges added

结论

使用GRANT命令可以为数据库中的各种实体提供不同的操作权限,也可以使用数据库中的其他外部对象,如果某些条件被接受的话。