當前位置:首頁 » 編程語言 » 賦權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
想給誰賦什麼樣的許可權都可以