当前位置:首页 » 编程语言 » 赋权sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

赋权sql

发布时间: 2023-01-05 10:34:17

1. 如何设置sqlSERVER 用户只能访问数据库中某几个表呢

1、打开——“开始”,选择——“所有程序”,找打“Microsoft SQL Server 2005”单击打开,然后选择——“SQL Server Management Studio Express”单击打开。

2. 请用SQL的GRANT 和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能:

如何让数据库的用户,只能 SELECT 到自己 INSERT 的数据。如何让数据库的用户,只能看到自己创建的数据。

--创建测试表
-- 3个字段,1自增主键,1数据,1所有者。
CREATE TABLE B (
ID INT identity(1, 1) PRIMARY KEY,
DATA VARCHAR(10),
OWNER VARCHAR(20)
);
go

-- 视图,隐藏所有者这一列
-- 并强制只能检索 所有者 = 当前登录用户
CREATE VIEW VB AS
SELECT
ID, DATA
FROM
B
WHERE
OWNER = user;
go

-- 首先插入3条数据,模拟用户 A,B,C
INSERT INTO B
SELECT 'A', 'A' UNION ALL
SELECT 'B', 'B' UNION ALL
SELECT 'C', 'C'
go

--然后 创建触发器,确保插入数据的时候,OWNER = 当前登录用户.
CREATE TRIGGER BeforeInsertB
ON B
FOR INSERT
AS
BEGIN
UPDATE
B
SET
Owner = user
FROM
B JOIN INSERTED ON (B.id = INSERTED.ID);
END
go

-- 开始模拟自己的插入
INSERT INTO VB VALUES( 'Me' );
GO
-- 尝试检索
SELECT * FROM VB
GO
ID DATA
----------- ----------
4 Me
(1 行受影响)
只看到自己插入的数据。

-- 下面去 创建 A , B 用户。
CREATE LOGIN A
WITH PASSWORD='A',
DEFAULT_DATABASE=[Test],
DEFAULT_LANGUAGE=[简体中文],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF;
CREATE LOGIN B
WITH PASSWORD='B',
DEFAULT_DATABASE=[Test],
DEFAULT_LANGUAGE=[简体中文],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF;
CREATE USER [A]
FOR LOGIN [A];
CREATE USER [B]
FOR LOGIN [B];

-- 对 A,B 用户进行 VIEW 的授权,
GRANT
INSERT, SELECT, UPDATE
ON [Test].[dbo].[VB]
TO A;
GRANT
INSERT, SELECT, UPDATE
ON [Test].[dbo].[VB]
TO B;
GO

-- 分别以 A 用户 和 B 用户进行登录,并查询。
E:\>sqlcmd -S "localhost\SQLEXPRESS" -U A -P A
1> use test
2> select * from vb
3> go
已将数据库上下文更改为 'test'。
ID DATA
----------- ----------
1 A
(1 行受影响)
1> select * from B
2> go
消息 229,级别 14,状态 5,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
拒绝了对对象 'B' (数据库 'test',架构 'dbo')的 SELECT 权限。

E:\>sqlcmd -S "localhost\SQLEXPRESS" -U B -P B
1> use test
2> go
已将数据库上下文更改为 'test'。
1> select * from vb
2> go
ID DATA
----------- ----------
2 B
(1 行受影响)
1> select * from B
2> go
消息 229,级别 14,状态 5,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
拒绝了对对象 'B' (数据库 'test',架构 'dbo')的 SELECT 权限。
1> INSERT INTO vb VALUES ('B Only');
2> go
(1 行受影响)
1> select * FROM VB;
2> go
ID DATA
----------- ----------
2 B
5 B Only
(2 行受影响)

结果显示,A,B用户登录以后,只能看到 Owner = 自己的数据。
因为只有对 View 有权限,对原始的表没有权限,因此看不到别人的数据。

3. 这个简单的SQL语言怎么写好呢

在本地服务器
create datebase link link_guizhou using guizhou;
在贵州服务器
alter database rename global_name to ora2000;
这样就可以在本地数据库查询远程数据库的数据了
select * from magazineitem where mobileid='13811681341'@link_guizhou;
---------------在Oracle中实现数据库的复制-------------------------
在Internet上运作数据库经常会有这样的需求:把遍布全国各城市相似的数据库应用统一起来,一个节点的数据改变不仅体现在本地,还反映到远端。复制技术给用户提供了一种快速访问共享数据的办法。
一、实现数据库复制的前提条件
1、数据库支持高级复制功能
您可以用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持。
2、数据库初始化参数要求
①、db_domain = test.com.cn
指明数据库的域名(默认的是WORLD),这里可以用您公司的域名。
②、global_names = true
它要求数据库链接(database link)和被连接的数据库名称一致。
现在全局数据库名:db_name+”.”+db_domain
③、有跟数据库job执行有关的参数
job_queue_processes = 1
job_queue_interval = 60
distributed_transactions = 10
open_links = 4
第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。
第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为1~3600秒。事实上,该进程执行完当前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。
如果修改了以上这几个参数,需要重新启动数据库以使参数生效。
二、实现数据库同步复制的步骤
假设在Internet上我们有两个数据库:一个叫深圳(shenzhen),一个叫北京(beijing)。
具体配置见下表:
数据库名 shenzhen beijing
数据库域名 test.com.cn test.com.cn
数据库sid号 shenzhen beijing
Listener端口号 1521 1521
服务器ip地址 10.1.1.100 10.1.1.200

1、确认两台数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。
①、例如:深圳这边的数据库连接字符串是以下的格式
beijing =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = beijing)
)
)
运行$tnsping beijing
出现以下提示符:
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
OK(n毫秒)
表明深圳数据库可以访问北京数据库。
②、在北京那边也同样配置,确认$tnsping shenzhen 是通的。
2、改数据库全局名称,建公共的数据库链接。
①、用system身份登录shenzhen数据库
SQL>alter database rename global_name to shenzhen.test.com.cn;
用system身份登录beijing数据库:
SQL>alter database rename global_name to beijing.test.com.cn;
②、用system身份登录shenzhen数据库
SQL>create public database link beijing.test.com.cn using 'beijing';
测试数据库全局名称和公共的数据库链接
SQL>select * from [email protected];
返回结果为beijing.test.com.cn就对了。
用system身份登录beijing数据库:
SQL>create public database link shenzhen.test.com.cn using 'shenzhen';
测试数据库全局名称和公共的数据库链接
SQL>select * from [email protected];
返回结果为shenzhen.test.com.cn就对了。
3、建立管理数据库复制的用户repadmin,并赋权。
①、用system身份登录shenzhen数据库
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL>execute dbms_defer_sys.register_propagator('repadmin');
SQL>grant execute any procere to repadmin;
SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
SQL>grant comment any table to repadmin;
SQL>grant lock any table to repadmin;
②、同样用system身份登录beijing数据库,运行以上的命令,管理数据库复制的用户repadmin,并赋权。
说明:repadmin用户名和密码可以根据用户的需求自由命名。
4、在数据库复制的用户repadmin下创建私有的数据库链接。
①、用repadmin身份登录shenzhen数据库
SQL>create database link beijing.test.com.cn connect to repadmin identified by repadmin;
测试这个私有的数据库链接:
SQL>select * from [email protected];
返回结果为beijing.test.com.cn就对了。
②、用repadmin身份登录beijing数据库
SQL>create database link shenzhen.test.com.cn connect to repadmin identified by repadmin;
测试这个私有的数据库链接
SQL>select * from [email protected];
返回结果为shenzhen.test.com.cn就对了。
5、创建或选择实现数据库复制的用户和对象,给用户赋权,数据库对象必须有主关键字。
假设我们用ORACLE里举例用的scott用户,dept表。
①、用internal身份登录shenzhen数据库,创建scott用户并赋权
SQL>create user scott identified by tiger default tablespace users temporary tablespace temp;
SQL>grant connect, resource to scott;
SQL>grant execute on sys.dbms_defer to scott;
②、用scott身份登录shenzhen数据库,创建表dept
SQL>create table dept
(deptno number(2) primary key,
dname varchar2(14),
loc varchar2(13) );
③、如果数据库对象没有主关键字,可以运行以下SQL命令添加:
SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno));
④、在shenzhen数据库scott用户下创建主关键字的序列号,范围避免和beijing的冲突。
SQL> create sequence dept_no increment by 1 start with 1 maxvalue 44 cycle nocache;
(说明:maxvalue 44可以根据应用程序及表结构主关键字定义的位数需要而定)
⑤、在shenzhen数据库scott用户下插入初始化数据
SQL>insert into dept values (dept_no.nextval,'accounting','new york');
SQL>insert into dept values (dept_no.nextval,'research','dallas');
SQL>commit;
⑥、在beijing数据库那边同样运行以上①,②,③
⑦、在beijing数据库scott用户下创建主关键字的序列号,范围避免和shenzhen的冲突。
SQL> create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;
⑧、在beijing数据库scott用户下插入初始化数据
SQL>insert into dept values (dept_no.nextval,'sales','chicago');
SQL>insert into dept values (dept_no.nextval,'operations','boston');
SQL>commit;
6、创建要复制的组scott_mg,加入数据库对象,产生对象的复制支持
①、用repadmin身份登录shenzhen数据库,创建主复制组scott_mg
SQL> execute dbms_repcat.create_master_repgroup('scott_mg');
说明:scott_mg组名可以根据用户的需求自由命名。
②、在复制组scott_mg里加入数据库对象
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'dept', type=>'table',use_existing_object=>true,gname=>'scott_mg');
参数说明:
sname 实现数据库复制的用户名称
oname 实现数据库复制的数据库对象名称
(表名长度在27个字节内,程序包名长度在24个字节内)
type 实现数据库复制的数据库对象类别
(支持的类别:表,索引,同义词,触发器,视图,过程,函数,程序包,程序包体)
use_existing_object true表示用主复制节点已经存在的数据库对象
gname 主复制组名
③、对数据库对象产生复制支持
SQL>execute dbms_repcat.generate_replication_support('scott','dept','table');
(说明:产生支持scott用户下dept表复制的数据库触发器和程序包)
④、确认复制的组和对象已经加入数据库的数据字典
SQL>select gname, master, status from dba_repgroup;
SQL>select * from dba_repobject;
7、创建主复制节点
①、用repadmin身份登录shenzhen数据库,创建主复制节点
SQL>execute dbms_repcat.add_master_database
(gname=>'scott_mg',master=>'beijing.test.com.cn',use_existing_objects=>true, _rows=>false, propagation_mode => 'asynchronous');
参数说明:
gname 主复制组名
master 加入主复制节点的另一个数据库
use_existing_object true表示用主复制节点已经存在的数据库对象
_rows false表示第一次开始复制时不用和主复制节点保持一致
propagation_mode 异步地执行
②、确认复制的任务队列已经加入数据库的数据字典
SQL>select * from user_jobs;
8、使同步组的状态由停顿(quiesced )改为正常(normal)
①、用repadmin身份登录shenzhen数据库,运行以下命令
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);
②、确认同步组的状态为正常(normal)
SQL> select gname, master, status from dba_repgroup;
③、如果这个①命令不能使同步组的状态为正常(normal),可能有一些停顿的复制,运行以下命令再试试(建议在紧急的时候才用):
SQL> execute dbms_repcat.resume_master_activity('scott_mg',true);
9、创建复制数据库的时间表,我们假设用固定的时间表:10分钟复制一次。
①、用repadmin身份登录shenzhen数据库,运行以下命令
SQL>begin
dbms_defer_sys.schele_push (
destination => 'beijing.test.com.cn',
interval => 'sysdate + 10/1440',
next_date => sysdate);
end;
/

SQL>begin
dbms_defer_sys.schele_purge (
next_date => sysdate,
interval => 'sysdate + 10/1440',
delay_seconds => 0,
rollback_segment => '');
end;
/

②、用repadmin身份登录beijing数据库,运行以下命令
SQL>begin
dbms_defer_sys.schele_push (
destination => ' shenzhen.test.com.cn ',
interval => 'sysdate + 10 / 1440',
next_date => sysdate);
end;
/

SQL>begin
dbms_defer_sys.schele_purge (
next_date => sysdate,
interval => 'sysdate + 10/1440',
delay_seconds => 0,
rollback_segment => '');
end;
/
10、添加或修改两边数据库的记录,跟踪复制过程
如果你想立刻看到添加或修改后数据库的记录的变化,可以在两边repadmin用户下找到push的job_number,然后运行:
SQL>exec dbms_job.run(job_number);
三、异常情况的处理
1、检查复制工作正常否,可以在repadmin 用户下查询user_jobs
SQL>select job,this_date,next_date,what, broken from user_jobs;
正常的状态有两种:
任务闲——this_date为空,next_date为当前时间后的一个时间值
任务忙——this_date不为空,next_date为当前时间后的一个时间值
异常状态也有两种:
任务死锁——next_date为当前时间前的一个时间值
任务死锁——next_date为非常大的一个时间值,例如:4001-01-01
这可能因为网络中断照成的死锁
解除死锁的办法:
$ps –ef|grep orale
找到死锁的刷新快照的进程号ora_snp*,用kill –9 命令删除此进程
然后进入repadmin 用户SQL>操作符下,运行命令:
SQL>exec dbms_job.run(job_number);
说明:job_number 为用select job,this_date,next_date,what from user_jobs;命令查出的job编号。
2、增加或减少复制组的复制对象
①、停止主数据库节点的复制动作,使同步组的状态由正常(normal)改为停顿(quiesced )
用repadmin身份登录shenzhen数据库,运行以下命令
SQL>execute dbms_repcat.suspend_master_activity (gname => 'scott_mg');
②、在复制组scott_mg里加入数据库对象,保证数据库对象必须有主关键字。
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'emp', type=>'table',use_existing_object=>true,gname=>'scott_mg');
对加入的数据库对象产生复制支持
SQL>execute dbms_repcat.generate_replication_support('scott','emp','table');
③、在复制组scott_mg里删除数据库对象。
SQL>execute dbms_repcat.drop_master_repobject ('scott','dept','table');
④、重新使同步组的状态由停顿(quiesced )改为正常(normal)。
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);

4. SQLServer中怎么设定用户对某张表的权限

方法一、由Management
Studio中的表上右键选属性(Properties),左边选权限(Permissions),右边中间添加和选中某个User或Role,下面选中或移除某个权限。
方法二、语句

Grant
权限
On
table
表名
To
用户名

5. db2不同表空间 赋权语句

首先在windows安装完DB2以后,打开DB2的命令行,然后依次执行下面代码.
db2 "CREATE DB TestDB using codeset UTF-8 territory us"
db2 "UPDATE DB CFG FOR TestDB USING applheapsz 4096"
db2 "UPDATE DB CFG FOR TestDB USING app_ctl_heap_sz 1024"
db2 "UPDATE DB CFG FOR TestDB USING stmtheap 8192"
db2 "UPDATE DB CFG FOR TestDB USING dbheap 2400"
db2 "UPDATE DB CFG FOR TestDB USING locklist 1000"
db2 "UPDATE DB CFG FOR TestDB USING logfilsiz 1000"
db2 "UPDATE DB CFG FOR TestDB USING logprimary 12"
db2 "UPDATE DB CFG FOR TestDB USING logsecond 20"
db2 "UPDATE DB CFG FOR TestDB USING logbufsz 32"
db2 "UPDATE DB CFG FOR TestDB USING avg_appls 5"
db2 "UPDATE DB CFG FOR TestDB USING locktimeout 30"
db2 CONNECT TO TestDB
db2 "CREATE BUFFERPOOL icmsbuffer SIZE 1000 PAGESIZE 32K"
db2 "CREATE TABLESPACE icmsspace PAGESIZE 32K MANAGED BY SYSTEM USING ('D:\db2admin\sqlt0003.0') BUFFERPOOL icmsbuffer"(根据实际情况确定是否是D盘下的db2admin\sqlt0003.0目录,如果没有,请先创建)
db2 "CREATE SYSTEM TEMPORARY TABLESPACE ICMSBUF PAGESIZE 32 K MANAGED BY SYSTEM USING ('D:\db2admin\sqlt0004.0') BUFFERPOOL ICMSBUFFER"(根据实际情况确定是否是D盘下的db2admin\ sqlt0004.0目录,如果没有,请先创建)
db2 "DISCONNECT icms"
db2 "TERMINATE"

6. 关于SQL SERVER 表授权问题!

这就要看你是用什么用户登录数据库的,如果你用的SSS用户登录的,那么你的赋权语句没有问题;如果你用的是你后建立的用户“王明”,那么你的赋权语句执行不成功,因为你的表:职工,是挂在SSS用户下,所以无法在王明用户对其进行赋权

7. 在sql server 怎么只建立一个数据库然后让多个用户在这个库中管理各自的数据

在数据库的"安全性"->"登录名"里面设置用户名,然后给每个用户名赋权.
例:你建立了三个用户A,B,C,他们分别需要管理数据库DB里table1,table2和table3这3张表.首先将A,B,C赋予对DB的public角色.然后根据各自需要管理的表赋权,比如用户A对table1有删除的权限,就执行SQL语句:use
DB
grant
delete
on
table1
to
A.比如B对table2有修改权限,就执行SQL语句:use
DB
grant
update
on
table2
to
B
想给谁赋什么样的权限都可以