1. sql的grant语句用法
GRANT
名称
GRANT — 赋予一个用户,一个组或所有用户访问权限
GRANT privilege [, ...] ON object [, ...]
TO { PUBLIC | GROUP group | username }
输入
privilege
可能的权限有:
SELECT
访问声明的表/视图的所有列/字段.
INSERT
向声明的表中插入所有列字段.
UPDATE
更新声明的所有列/字段.
DELETE
从声明的表中删除所有行.
RULE
在表/视图上定义规则 (参见 CREATE RULE 语句).
ALL
赋予所有权限.
object
赋予权限的对象名.可能的对象是:
table (表)
view (视图)
sequence (序列)
index (索引)
PUBLIC
代表是所有用户的简写.
GROUP group
将要赋予权限的组 group .目前的版本中,组必须是用下面方法显式创建的.
username
将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.
输出
CHANGE
如果成功,返回此信息.
ERROR: ChangeAcl: class "object" not found
如果所声明的对象不可用或不可能对声明的组或用户赋予权限.
描述
GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限.对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限.
一旦用户有某对象的权限,他就可以使用那个特权.不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限.
注意
目前,要想在 Postgres 里面只赋予几列权限,你必须创建一个包含那几列的视图(view),然后把权限赋予那几个视图。
使用 psql \z 命令获取关于现存对象权限的更多信息:
Database = lusitania
+------------------+---------------------------------------------+
| Relation | Grant/Revoke Permissions |
+------------------+---------------------------------------------+
| mytable | {"=rw","miriam=arwR","group todos=rw"} |
+------------------+---------------------------------------------+
Legend:
uname=arwR -- privileges granted to a user
group gname=arwR -- privileges granted to a GROUP
=arwR -- privileges granted to PUBLIC
r -- SELECT
w -- UPDATE/DELETE
a -- INSERT
R -- RULE
arwR -- ALL
小技巧: 目前,要创建一个 GROUP (组), 你将不得不手工向表 pg_group 中插入数据,像:
INSERT INTO pg_group VALUES ('todos');
CREATE USER miriam IN GROUP todos;
参考 REVOKE 语句重新分配访问权限.
用法
给所有用户向表 films 插入记录的权限:
GRANT INSERT ON films TO PUBLIC;
赋予用户 manuel 操作视图 kinds 的所有权限:
GRANT ALL ON kinds TO manuel;
兼容性
SQL92
SQL92 GRANT 语法允许对表中的某单独列/字段设置权限,并且允许设置一权限以赋予别人相同权限.
GRANT privilege [, ...]
ON object [ ( column [, ...] ) ] [, ...]
TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
这些字段与 Postgres 实现是兼容的,除了下面一些例外:
privilege
SQL92 允许声明附加的权限:
SELECT
REFERENCES
允许在一个声明的表的整合约束中使用某些或全部列/字段.
USAGE
允许使用一个域,字符集,集合或事务.如果声明的对象不是表/视图, privilege 只能声明为 USAGE.
object
[ TABLE ] table
SQL92 允许一个附加的非函数关键字 TABLE.
CHARACTER SET
允许使用声明的字符集.
COLLATION
允许使用声明的集合序列.
TRANSLATION
允许使用声明的字符集转换.
DOMAIN
允许使用声明的域.
WITH GRANT OPTION
允许向别人赋予同样权限.
2. oracle 有个问题不懂,求解!
这个fopen打开的应该是utl_file_dir这个路径,请用以下SQL查询:
select * from v$parameter
where name like 'utl_file_dir%'
我初步看了一下,应该是v$parameter这个系统表中的value字段
该路径可以按照以下方法设置:
第一步:以管理员用户登陆
如:conn sys/password@sid as sysdba
第二步:设置可操作目录
需要指定utl_file包可以操作的目录。在oracle 10g以前,可以用以下方法:
1、alter system set utl_file_dir='e:\utl' scope=spfile;
2、在init.ora文件中,配置如下:
UTL_FILE=E:\utl或者UTL_FILE_DIR=E:\utl
在oracle 10g中建议用以下方法配置:CREATE DIRECTORY utl AS 'E:\utl';
第三步:授权给指定用户,以便执行utl_file
GRANT EXECUTE ON utl_file TO scott;
第四步:conn scott/tiger
就可以正常使用utl_file了。
具体可以参考:http://icelander.javaeye.com/blog/235391
3. ORACLE create or replace directory ,相关问题
不太明白你的意思。
你是说zzjy自己创建的目录自己不能够访问吗?
实测了一下是可以的。
SQL> grant create any directory to scott; 给scott用户创建目录的权限
Grant succeeded.
SQL> conn scott/oracle; 连接scottConnected.SQL> create directory dir3 as '/u01/app/oracle'; 创建目录
Directory created.
试着导出时使用该目录,发现成功。[oracle@oracle ~]$ expdp directory=dir3 tables=scott.emp dumpfile=a.dmp
Export: Release 10.2.0.1.0 - Production on Thursday, 09 January, 2014 18:00:29
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Username: scottPassword:
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsStarting "SCOTT"."SYS_EXPORT_TABLE_01": scott/******** directory=dir3 tables=scott.emp dumpfile=a.dmp Estimate in progress using BLOCKS method...Processing object type TABLE_EXPORT/TABLE/TABLE_DATATotal estimation using BLOCKS method: 64 KBProcessing object type TABLE_EXPORT/TABLE/TABLEProcessing object type TABLE_EXPORT/TABLE/INDEX/INDEXProcessing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINTProcessing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT. . exported "SCOTT"."EMP" 7.820 KB 14 rowsMaster table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded******************************************************************************Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is: /u01/app/oracle/a.dmpJob "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 18:00:35
如果你的意思是,想让zzjy创建的目录任何用户都可以使用:
grant all on directory p_dir to public;
grant read,write on directory p_dir to public;
4. 如何在一个grant语句里授权多个库
GRANT
在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的 Transact-SQL 语句。
语法
语句权限:
GRANT { ALL | statement [ ,...n ] }
TO security_account [ ,...n ]
对象权限:
GRANT
{ ALL [ PRIVILEGES ] | permission [ ,...n ] }
{
[ ( column [ ,...n ] ) ] ON { table | view }
| ON { table | view } [ ( column [ ,...n ] ) ]
| ON { stored_procedure | extended_procedure }
| ON { user_defined_function }
}
TO security_account [ ,...n ]
[ WITH GRANT OPTION ]
[ AS { group | role } ]
参数
ALL
表示授予所有可用的权限。对于语句权限,只有 sysadmin 角色成员可以使用 ALL。对于对象权限,sysadmin 和 db_owner 角色成员和数据库对象所有者都可以使用 ALL。
statement
是被授予权限的语句。语句列表可以包括:
CREATE DATABASE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
BACKUP DATABASE
BACKUP LOG
n
一个占位符,表示此项可在逗号分隔的列表中重复。
TO
指定安全帐户列表。
security_account
是权限将应用的安全帐户。安全帐户可以是:
Microsoft® SQL Server™ 用户。
SQL Server 角色。
Microsoft Windows NT® 用户。
Windows NT 组。
当权限被授予一个 SQL Server 用户或 Windows NT 用户帐户,指定的 security_account 是权限能影响到的唯一帐户。若权限被授予 SQL Server 角色或 Windows NT 组,权限可影响到当前数据库中该组或该角色成员的所有用户。若组或角色和它们的成员之间存在权限冲突,最严格的权限 (DENY) 优先起作用。security_account 必须在当前数据库中存在;不可将权限授予其它数据库中的用户、角色或组,除非已为该用户在当前数据库中创建或给予了访问权限。
两个特殊的安全帐户可用于 GRANT 语句。授予 public 角色的权限可应用于数据库中的所有用户。授予 guest 用户的权限可为所有在数据库中没有用户帐户的用户使用。
当授予某个 Windows NT 本地组或全局组权限时,请指定在其上定义该组的域名或计算机名,然后依次输入反斜线和组名。但是,若要授予访问 Windows NT 内置本地组的权限,请指定 BUILTIN 而不是域名或计算机名。
PRIVILEGES
是可以包含在符合 SQL-92 标准的语句中的可选关键字。
permission
是当前授予的对象权限。当在表、表值函数或视图上授予对象权限时,权限列表可以包括这些权限中的一个或多个:SELECT、INSERT、DELETE、REFENENCES 或 UPDATE。列列表可以与 SELECT 和 UPDATE 权限一起提供。如果列列表未与 SELECT 和 UPDATE 权限一起提供,那么该权限应用于表、视图或表值函数中的所有列。
在存储过程上授予的对象权限只可以包括 EXECUTE。在标量值函数上授予的对象权限可以包括 EXECUTE 和 REFERENCES。
为在 SELECT 语句中访问某个列,该列上需要有 SELECT 权限。为使用 UPDATE 语句更新某个列,该列上需要有 UPDATE 权限。
为创建引用某个表的 FOREIGN KEY 约束,该表上需要有 REFERENCES 权限。
为使用引用某个对象的 WITH SCHEMABINDING 子句创建 FUNCTION 或 VIEW,该对象上需要有 REFERENCES 权限。
column
是当前数据库中授予权限的列名。
table
是当前数据库中授予权限的表名。
view
是当前数据库中被授予权限的视图名。
stored_procedure
是当前数据库中授予权限的存储过程名。
extended_procedure
是当前数据库中授予权限的扩展存储过程名。
user_defined_function
是当前数据库中授予权限的用户定义函数名。
WITH GRANT OPTION
表示给予了 security_account 将指定的对象权限授予其它安全帐户的能力。WITH GRANT OPTION 子句仅对对象权限有效。
AS {group | role}
指当前数据库中有执行 GRANT 语句权力的安全帐户的可选名。当对象上的权限被授予一个组或角色时使用 AS,对象权限需要进一步授予不是组或角色的成员的用户。因为只有用户(而不是组或角色)可执行 GRANT 语句,组或角色的特定成员授予组或角色权力之下的对象的权限。
注释
不允许有跨数据库权限;只能将当前数据库中的对象和语句的权限授予当前数据库中的用户。如果用户需要另一个数据库中的对象的权限,请在该数据库中创建用户帐户,或者授权用户帐户访问该数据库以及当前数据库。
说明 系统存储过程是例外,因为 EXECUTE 权限已经授予 public 角色,允许任何人去执行。但是在执行系统存储过程后,将检查用户的角色成员资格。如果此用户不是运行此存储过程所需要的适当的固定服务器或数据库角色的成员,则此存储过程不会继续执行。
REVOKE 语句可用于删除已授予的权限,DENY 语句可用于防止用户通过 GRANT 语句获得权限给他们的用户帐户。
授予权限删除所授予级别(用户、组或角色)上的已拒绝权限或已废除权限。在另一级别(诸如包含此用户的组或角色)上被拒绝的同一权限优先起作用。但是,虽然在另一级别上所废除的同一权限仍然适用,但它并不阻止用户访问该对象。
如果用户激活应用程序角色,对此用户通过该应用程序角色访问的任何对象,GRANT 的作用为空。因此,尽管一个用户可能被授予了对当前数据库中的指定对象的访问权限,但是如果此用户使用对此对象无访问权限的应用程序角色,则在应用程序角色激活期间,此用户也没有此对象的访问权限。
sp_helprotect 系统存储过程报告在数据库对象或用户上的权限。
权限
GRANT 权限依赖于所授予的语句权限和权限中涉及的对象。sysadmin 角色中的成员可在任何数据库中授予任何权限。对象所有者可为他们所拥有的对象授予权限。db_owner 或 db_securityadmin 角色的成员可授予其数据库中任何语句或对象上的任何权限。
需要权限的语句是那些在数据库中增加对象,或对数据库执行管理活动的语句。每条需要权限的语句都有一个特定的角色集,自动有权限执行此语句。例如,sysadmin、db_owner 和 db_ddladmin 角色的成员默认有CREATE TABLE 权限。sysadmin 和 db_owner 角色以及表的所有者默认有对表执行 SELECT 语句的权限。
有一些 Transact-SQL 语句不能被授予权限;执行这些语句要求有固定角色中的成员资格,此角色有默示执行特殊语句的权限。例如,若要执行 SHUTDOWN 语句,用户必须添加为 serveradmin 角色中的成员。
dbcreator、processadmin、securityadmin 和 serveradmin 固定服务器角色的成员仅有权执行以下 Transact-SQL 语句。
语句 dbcreator processadmin securityadmin serveradmin bulkadmin
ALTER DATABASE X
CREATE DATABASE X
BULK INSERT X
DBCC X (1)
DENY X (2)
GRANT X (2)
KILL X
RECONFIGURE X
RESTORE X
REVOKE X (2)
SHUTDOWN X
(1) 有关更多信息,请参见 DBCC 语句。
(2) 仅适用于 CREATE DATABASE 语句。
说明 diskadmin 和 setupadmin 固定服务器角色的成员没有权限执行任何 Transact-SQL 语句,他们只能执行特定的系统存储过程。但是,sysadmin 固定服务器角色的成员有权限执行所有的 Transact-SQL 语句。
下面的固定数据库角色的成员有权限执行指定的 Transact-SQL 语句。
语句
db_owner
db_datareader
db_datawriter
db_ddladmin db_backupoperator db_securityadmin
ALTER DATABASE X X
ALTER FUNCTION X X
ALTER PROCEDURE X X
ALTER TABLE X (1) X
ALTER TRIGGER X X
ALTER VIEW X (1) X
BACKUP X X
CHECKPOINT X X
CREATE DEFAULT X X
CREATE FUNCTION X X
CREATE INDEX X (1) X
CREATE PROCEDURE X X
CREATE RULE X X
CREATE TABLE X X
CREATE TRIGGER X (1) X
CREATE VIEW X X
DBCC X X (2)
DELETE X (1) X
DENY X X
DENY on object X
DROP X (1) X
EXECUTE X (1)
GRANT X X
GRANT on object X (1)
INSERT X (1) X
READTEXT X (1) X
REFERENCES X (1) X
RESTORE X
REVOKE X X
REVOKE on object X (1)
SELECT X (1) X
SETUSER X
TRUNCATE TABLE X (1) X
UPDATE X (1) X
UPDATE STATISTICS X (1)
UPDATETEXT X (1) X
WRITETEXT X (1) X
(1) 权限也适用于对象所有者。
(2) 有关更多信息,请参见 DBCC 语句。
说明 db_accessadmin 固定数据库角色的成员没有执行任何 Transact-SQL 语句的权限,只可执行特定的系统存储过程。
不需要权限即可执行的 Transact-SQL 语句有(已自动授予 public):
BEGIN TRANSACTION COMMIT TRANSACTION
PRINT RAISERROR
ROLLBACK TRANSACTION SAVE TRANSACTION
SET
有关执行系统存储过程所需权限的更多信息,请参见相应的系统存储过程。
示例
A. 授予语句权限
下面的示例给用户 Mary 和 John 以及 Windows NT 组 Corporate\BobJ 授予多个语句权限。
GRANT CREATE DATABASE, CREATE TABLE
TO Mary, John, [Corporate\BobJ]
B. 在权限层次中授予对象权限
下例显示权限的优先顺序。首先,给 public 角色授予 SELECT 权限。然后,将特定的权限授予用户 Mary、John 和 Tom。于是这些用户就有了对 authors 表的所有权限。
USE pubs
GO
GRANT SELECT
ON authors
TO public
GO
GRANT INSERT, UPDATE, DELETE
ON authors
TO Mary, John, Tom
GO
C. 给 SQL Server 角色授予权限
下面的示例将 CREATE TABLE 权限授予 Accounting 角色的所有成员。
GRANT CREATE TABLE TO Accounting
D. 用 AS 选项授予权限
用户 Jean 拥有表 Plan_Data。Jean 将表 Plan_Data 的 SELECT 权限授予 Accounting 角色(指定 WITH GRANT OPTION 子句)。用户 Jill 是 Accounting 的成员,他要将表 Plan_Data 上的 SELECT 权限授予用户 Jack,Jack 不是 Accounting 的成员。
因为对表 Plan_Data 用 GRANT 语句授予其他用户 SELECT 权限的权限是授予 Accounting 角色而不是显式地授予 Jill,不能因为已授予 Accounting 角色中成员该权限,而使 Jill 能够授予表的权限。Jill 必须用 AS 子句来获得 Accounting 角色的授予权限。
/* User Jean */
GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION
/* User Jill */
GRANT SELECT ON Plan_Data TO Jack AS Accounting
5. android 6.0动态权限写在第一个activity中就行了吗
不是的,要在申请权限的过程中。
申请权限步骤
注意,如果你将targetSdkVersion设置为>=23,则必须按照Android谷歌的要求,动态的申请权限,如果你暂时不打算支持动态权限申请,则targetSdkVersion最大只能设置为22.
在AndroidManifest.xml中申请你需要的权限,包括普通权限和需要申请的特殊权限。
开始申请权限,此处分为3步:检查是否由此权限checkSelfPermission(),如果已经开启,则直接做你想做的。如果未开启,则判断是否需要向用户解释为何申请权限shouldShowRequestPermissionRationale。如果需要(即返回true),则可以弹出对话框提示用户申请权限原因,用户确认后申请权限requestPermissions(),如果不需要(即返回false),则直接申请权限requestPermissions。
6. 如何把oracle 存储过程 输出到文本
分几个步骤 1,创建输出路径,比如你要在c盘test目录下输出,你就先要建立好这个test路径 2,sqlplus下以sysdba登录,执行以下语句 3,create or replace directory TMP as 'c:\test'; 4,grant read,write on directory TMP to 你要生成文件的用户; 5,alter system set utl_file_dir='c:\test' scope=spfile; 以上步骤执行完,需要重启数据库 6,最重要的一步开始了,创建存储过程 create or replace PROCEDURE SP_OUTPUTisfile_handle utl_file.file_type;Write_content VARCHAR2(1024);Write_file_name VARCHAR2(50);v_id int;v_form varchar2(10);cursor cur_sp_outisselect id,form from a;beginopen cur_sp_out;loop fetch cur_sp_out into v_id,v_form; exit when cur_sp_out%notfound; write_file_name := to_char(SYSDATE,'MMDD')||'.txt'; file_handle := utl_file.fopen('TMP',write_file_name,'a'); write_content := v_id||' '||v_form; --write file IF utl_file.is_open(file_handle) THEN utl_file.put_line(file_handle,write_content); END IF; --close file utl_file.fclose(file_handle); end loop; close cur_sp_out;end; 我建立了一个跟你一样的测试表,数据如下 create table a(id int,form varchar2(10));insert into a values (1,'你好');insert into a values (2,'你很好'); 然后执行存储过程 begin SP_OUTPUT;end; 执行完毕后,你在c盘test路径下会发现已经有新文件生成 文件内容 存储过程的话,如果表名和字段名跟你一致的话,你无须修改
7. oracle将表A里的数据导出为txt文件,用存储过程怎么写?
分几个步骤
1,创建输出路径,比如你要在c盘test目录下输出,你就先要建立好这个test路径
2,sqlplus下以sysdba登录,执行以下语句
3,create or replace directory TMP as 'c:\test';
4,grant read,write on directory TMP to 你要生成文件的用户;
5,alter system set utl_file_dir='c:\test' scope=spfile;
以上步骤执行完,需要重启数据库
6,最重要的一步开始了,创建存储过程
create or replace PROCEDURE SP_OUTPUTisfile_handle utl_file.file_type;Write_content VARCHAR2(1024);Write_file_name VARCHAR2(50);v_id int;v_form varchar2(10);cursor cur_sp_outisselect id,form from a;beginopen cur_sp_out;loop fetch cur_sp_out into v_id,v_form; exit when cur_sp_out%notfound; write_file_name := to_char(SYSDATE,'YYYYMMDD')||'.txt'; file_handle := utl_file.fopen('TMP',write_file_name,'a'); write_content := v_id||' '||v_form; --write file IF utl_file.is_open(file_handle) THEN utl_file.put_line(file_handle,write_content); END IF; --close file utl_file.fclose(file_handle); end loop; close cur_sp_out;end;
我建立了一个跟你一样的测试表,数据如下
create table a(id int,form varchar2(10));insert into a values (1,'你好');insert into a values (2,'你很好');
然后执行存储过程
begin SP_OUTPUT;end;
执行完毕后,你在c盘test路径下会发现已经有新文件生成
文件内容
存储过程的话,如果表名和字段名跟你一致的话,你无须修改
8. 如何看待日志易从schema on write切换成了schema on read
直观来说,schema on write表示数据在入DB前进行处理,schema on read表示将数据的处理推迟到从DB读出后。如果你能确定在将来很长的一段时间内,你所需要处理的日志数据的格式是不会有变化的,那么你就可以使用schema on write。这样从库中读出来后,可以直接分析了;但是,如果你的业务种类很多,以后还有可能会扩充的话。那么建议你使用schema on read。这样你可以根据具体需求,结合一些分析工具比如Hive, Spark,对你的数据做一些处理。那么,日志易变成schema on read的原因可能就是不断有新的需求被提出吧。附上一个链接网页链接