Oracle11gR2将A用户下的所有table,packe的权限赋予给B用户的方法
以下操作实现把HONGSINNC用户下的表,授权给MDATA用户,使其有select权限,步骤如下:
1、使用DBA帐号HONGSINNC登录PL/SQL,执行查询如下:
select 'grant select on HONGSINNC.'||tname||' to MDATA;' from tab
2、将查询结果导出为csv文件,打开里面即有对应的grant语句,全部执行,即可;
空杯心态,勿忘初心;但行好事,莫问前程。
以下操作实现把HONGSINNC用户下的表,授权给MDATA用户,使其有select权限,步骤如下:
1、使用DBA帐号HONGSINNC登录PL/SQL,执行查询如下:
select 'grant select on HONGSINNC.'||tname||' to MDATA;' from tab
2、将查询结果导出为csv文件,打开里面即有对应的grant语句,全部执行,即可;
视图其实就是一张虚拟的表,所有也可以认为是一张表,MySQL查询所有视图:
show table status where comment='view'\G;
查询视图结构:
DESC master_data_user;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| username | varchar(255) | YES | | NULL | |
| org_id | varchar(255) | YES | | NULL | |
| status | varchar(255) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| org_name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
| telephone | varchar(255) | YES | | NULL | |
| post | varchar(255) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
或者
SHOW TABLE STATUS LIKE 'master_data_user'\G;
*************************** 1. row ***************************
Name: master_data_user
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
1 row in set (0.00 sec)
创建data_view用户并授予单个视图权限:
grant select,show view on escdb.master_data_org to data_view@'192.168.%' IDENTIFIED BY 'xxxxxxx';
grant select,show view on escdb.master_data_user to data_view@'192.168.%' ;
flush privileges;
data_view登录后即只能查看master_data_org和master_data_user视图;
查看当前登录用户权限:
show grants;
+----------------------------------------------------------------------------------+
| Grants for data_view@192.168.% |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'data_view'@'192.168.%' |
| GRANT SELECT, SHOW VIEW ON `escdb`.`master_data_org` TO 'data_view'@'192.168.%' |
| GRANT SELECT, SHOW VIEW ON `escdb`.`master_data_user` TO 'data_view'@'192.168.%' |
+----------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
查看视图是指查看数据库中,已经存在的视图的定义 必须要有SHOW VIEW的权限
查看视图有三种方式:
DESCRIBE语句
使用DESCRIBE语句,查看视图
MySQL中,使用DESCRIBE可以查看视图的字段信息,其中,包括字段名、字段类型等信息
语法格式:
DESCRIBE 视图名;
或者
DESC 视图名;
root@sso_db_69 17:58: [escdb]> desc oa_org;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| id | varchar(36) | NO | | NULL | |
| name | varchar(255) | NO | | NULL | |
| fullName | varchar(255) | YES | | NULL | |
| resource_id | varchar(255) | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
查询所有DBA账号
select * from dba_role_privs where granted_role='DBA';
或者
select * from (select distinct connect_by_root grantee username,granted_role from dba_role_privs connect by prior granted_role =grantee ) a where a.granted_role='DBA';
查看所有用户:
select * from dba_users;
select * from all_users;
select * from user_users;
查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
查看所有角色:
select * from dba_roles;
查看用户或角色所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
SQL> select * from V$PWFILE_USERS;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
查看RESOURCE具有那些权限
SQL> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE TABLE NO
已选择8行。
查看角色(DBA)被赋予的角色权限
select * from role_role_privs t where t.role = 'DBA';
查看角色(DBA)被赋予的对象权限
select * from role_tab_privs t1 where t1.role = 'DBA';
mysqldump -uroot -pPasswd DBName > /home/lsf/DB_Backup.sql
报错,显示:
Got error: 1449: The user specified as a definer ('xxx'@'') does not exist when using LOCK TABLES
或者直接报:
the user specified as a definer ('xxx'@'') does not exist
解决办法:
给xxx用户再添加一个对全部host都有可以访问的权限:
mysql -uroot -pPasswd
mysql >grant all privileges on *.* to xxx@"%" identified by "Passwd";
mysql >flush privileges;
MySQL的权限系统围绕着两个概念:
认证->确定用户是否允许连接数据库服务器
授权->确定用户是否拥有足够的权限执行查询请求等。
如果认证不成功的话,哪么授权肯定是无法进行的。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from”
GRANT和REVOKE管理的权限
ALL PRIVILEGES
影响除WITH GRANT OPTION之外的所有权限
ALTER
影响ALTER TABLE命令的使用
ALTER ROUTINE
影响创建存储例程的能力
CREATE
影响CREATE TABLE命令的使用
CREATE ROUTINE
影响更改和弃用存储例程的能力
CREATE TEMPORARY TABLES
影响CREATE TEMPORARY TABLE命令的使用
CREATE USER
影响创建、弃用;重命名和撤销用户权限的能力
CREATE VIEW
影响CREATE VIEW命令的使用
DELETE
影响DELETE命令的使用
DROP
影响DROP TABLE命令的使用
EXECUTE
影响用户运行存储过程的能力
EVENT
影响执行事件的能力(从MySQL5.1.6开始)
FILE
影响SELECT INTO OUTFILE和LOAD DATA INFILE的使用
GRANT OPTION
影响用户委派权限的能力
INDEX
影响CREATE INDEX和DROP INDEX命令的使用
INSERT
影响INSERT命令的使用
LOCK TABLES
影响LOCK TABLES命令的使用
PROCESS
影响SHOW PROCESSLIST命令的使用
REFERENCES
未来MySQL特性的占位符
RELOAD
影响FLUSH命令集的使用
REPLICATION CLIENT
影响用户查询从服务器和主服务器位置的能力
REPLICATION SLAVE
复制从服务器所需的权限
SELECT
影响SELECT命令的使用
SHOW DATABASES
影响SHOW DATABASES命令的使用
SHOW VIEW
影响SHOW CREATE VIEW命令的使用
SHUTDOWN
影响SHUTDOWN命令的使用
SUPER
影响管理员级命令的使用,如CHANGE、MASTER、KILL thread、mysqladmin debug、PURGE MASTER LOGS和SET GLOBAL
TRIGGER
影响执行触发器的能力(从MySQL5.1.6开始)
UPDATE
影响UPDATE命令的使用
USAGE
只连接,不授予权限
在Oracle11gR2数据库上,以DBA权限的账号执行存储过程报错,PL/SQL:ORA-01031:权限不足,如下图
原因:
1、ORACLE默认为定义者权限,定义者权限在存储过程中ROLE无效,需要显示授权。
2、如果使用AUTHID CURRENT_USER关键字使用调用者权限,则编译时ROLE无效,运行时有效。
解决办法:
方法1:对存储过程来说,CREATE TABLE想使用CREATE ANY TABLE权限,而CREATE ANY TABLE权限来自DBA角色,默认情况下,虽然在会话环境中可见,但在存储过程中不可见(无效)。
所以根据上面的第一条规则,可以显示地将CREATE ANY TABLE权限授予DBA用户就可以了,即
GRANT update ANY TABLE TO xxxuser; #里面的权限根据具体存储过程更改
方法2:采用调用者权限,由于过程中使用动态SQL,所以可以避开编译时的检查,但在运行时DBA角色生效,即
CREATE OR REPLACE PROCEDURE INSERT_DATA --插入user_客户ID,套餐表,客户宽表
(RTN_ID OUT NUMBER, --返回错误ID
RTN_STR OUT VARCHAR --返回错误叙述
) AUTHID CURRENT_USER IS
进入Linux单用户模式,必须先设置根目录权限,使其有读写权限
mount -o remount,rw /
然后/etc/fstab就可以修改了,修改完直接保存重启即可。
存储过程(Stored Procedure):
一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
优点(为什么要用存储过程?):
将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
批量处理:SQL+循环,减少流量,也就是“跑批”
统一接口,确保数据的安全
相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。
一、存储过程的创建和调用
>存储过程就是具有名字的一段代码,用来完成一个特定的功能。
>创建的存储过程保存在数据库的数据字典中。
创建存储过程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
存储过程权限相关:
CREATE ROUTINE : 创建存储过程的权限
ALTER ROUTINE : 修改存储过程的权限
EXECUTE :执行存储过程的权限
GRANT SELECT ON `mysql`.`proc` TO 'bis_enrolment_u'@'10.200.%' identified by 'xxxxx'; ; 普通账号没有查看存储过程或函数的权限,增加后可以看到系统有多少个函数或存储过程·
MongoDB权限认证流程:
MongoDB没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
切换到admin数据库,添加的账号才是管理员账号
用户只能在用户所在数据库登录,包括管理员账号
管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
添加管理员账号
[root@c160 ~]# mongo -host 127.0.0.1 -port 30000
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:30000/
MongoDB server version: 3.4.10
> use admin #切换到admin数据库
switched to db admin
> db.system.users.find(); #用户表没有数据
> show users;
> db.createUser( #创建管理员账号admin
{
user:"admin",
pwd:"123456",
roles:[{role:"userAdminAnyDatabase",db:"admin"}]
}
)
开启权限验证
修改配置文件加上auth=true参数,开启认证,需重启生效
> show dbs #显示所有数据库失败,还没认证
2017-11-30T22:47:12.341+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1
> use admin //切换到admin数据库
switched to db admin
> db.auth('admin','123456'); //在admin数据库认证成功
1
> show dbs
admin 0.000GB
local 0.000GB
在创建用户的时候如果直接给用户DBA权限,那么在B用户中可以直接查询A用户的表,但是在创建或查询视图时就会报无权限,在这种情况下需要再在被访问的A用户里面去给予要访问该表的B用户授权,查询的时候回提示权限不足,解决办法如下:
grant create view to B; --创建视图权限
grant select any table to B; --授予查询权限
grant select any dictionary to B; --授予数据字典权限
然后查询就可以了;
线上库新建账号以后给select权限,但是 select into outfile导出查询结果的时候直接报错:
select * from user into outfile '/tmp/user.csv';
ERROR 1045 (28000): Access denied for user cha@'192.168.%' (using password: YES)
赋予file权限
(root@localhost) [mysql]>grant file on test.* to cha@'192.168.%';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES --提示该权限是global,必须使用*.* 方式
(root@localhost) [mysql]>grant file on *.* to cha@'192.168.%';
Query OK, 0 rows affected (0.00 sec)
再次执行查询导出成功:
select * from user into outfile '/tmp/user.csv';
Query OK, 300 rows affected (0.01 sec)
sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott
sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott
A、创建用户的Profile文件
CREATE PROFILE STUDENT LIMIT // student为资源文件名
FAILED_LOGIN_ATTEMPTS 3 //指定锁定用户的登录失败次数
PASSWORD_LOCK_TIME 5 //指定用户被锁定天数
PASSWORD_LIFE_TIME 30 //指定口令可用天数
PASSWORD_LOCK_TIME:用于指定帐户被锁定的天数.
PASSWORD_LIFE_TIME:用于指定口令有效期
PASSWORD_GRACE_TIME:用于指定口令宽限期.
PASSWORD_REUSE_TIME:用于指定口令可重用时间.
PASSWORD_REUSE_MAX;用于指定在重用口令之前口令需要改变的次数.
PASSWORD_VERIFY_FUNCTION;是否校验口令(校验将值改为VERIFY_FUNCTION)
CPU_PER_SESSION:用于指定每个会话可以占用的最大CPU时间.
LOGICAL_READS_PER_SESSON:用于指定会话的最大逻辑读取次数.
PRIVATE_SGA:用于指定会话在共享池中可以分配的最大总计私有空间.需要注意,该选项只使用与共享服务器模式.
COMPOSITE_LIMIT:用于指定会话的总计资源消耗(单位:服务单元).
CPU_PER_CALL:限制每次调用(解析,执行或提取数据)可占用的最大CPU时间(单位:百分之一秒)
LOGICAL_READS_PER_CALL:用于限制每次调用的最大逻辑I/O次数.
SESSIONS_PER_USER:用于指定每个用户的最大并发会话个数.
CONNECT_TIME:用于指定会话的最大连接时间.
IDLE_TIME:用于指定会话的最大空闲时间.
查看一个用户的所有系统权限(包含角色的系统权限)
select privilege from dba_sys_privs where grantee='DATAUSER'
union
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );
好几年不用ftp了,本来想着yum安装下完事,发现版本太低了,2.x,官方已经3.0.3了,故编译安装。记录安装步骤如下:
最好关闭掉selinux。
一、安装基础依赖包下载源码包:
yum install gcc gcc-c++ db4-utils pam-devel libcap libcap-devel -y
wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz
官网地址在这里https://security.appspot.com/vsftpd.html
二、编译安装:
tar xvf vsftpd-3.0.3.tar.gz
cd vsftpd-3.0.3
make
make install
即可安装完成,使用vsftpd -v查看版本号 vsftpd: version 3.0.3
三、配置
把身份认证模块拷贝至系统目录中
实现场景某个文件夹,多用户都可以编辑\删除更新等,及实现文件夹共享功能,实现步骤如下:
groupadd ceshi
useradd t1 --groups ceshi
useradd t2 --groups ceshi
mkdir /data/testfile
chmod -R 770 /data/testfile
chown t1 /data/testfile/
chgrp ceshi /data/testfile/
setfacl -d --set g:ceshi:rwx /data/testfile/
setfacl -R -m g:ceshi:rwx /data/testfile/
chmod g+w /data/testfile/
t1和t2即可对/data/testfile/目录下的任何文件、文件夹有操作权限,t1和t2都属于ceshi用户组,其他用户要加进来,只要用户组属于ceshi组即可。
MongoDB用户权限设置逻辑:先初始化一个超级管理员,然后让这个超管用户,创建普通用户和角色,并给用户分配角色,同时也有一些内建的角色可以使用。
oracle新增的每个表都要设置权限,如:GRANT update,select ON test TO dbuser; -----把表test的修改、查询权限赋给dbuser;
以下是权限说明:
MySQL执行存储过程的时候,报错“ User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.”