當前位置:首頁 » 編程語言 » sql實現授權操作
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql實現授權操作

發布時間: 2023-06-10 03:26:57

1. sqlSQL資料庫怎麼批量為存儲過程/函數授權

1:右鍵單擊登錄名Test的屬性.

2: 在伺服器角色裡面選擇"public"伺服器角色。

3:在用戶映射選項當中,選擇"db_datareader"、"db_datawriter"、"public"三個資料庫角色成員。

此時,已經實現了擁有DML操作許可權,如果需要擁有存儲過程和函數的執行許可權,必須使用GRANT語句去授權,一個生產庫的存儲過程和函數加起來成千上百,如果手工執行的話,那將是一個辛苦的體力活,而我手頭有十幾個庫,所以必須用腳本去實現授權過程。下面是我寫的一個存儲過程,亮點主要在於會判斷存儲過程、函數是否已經授予了EXE或SELECT許可權給某個用戶。這里主要用到了安全目錄試圖sys.database_permissions,例如,資料庫裡面有個存儲過程dbo.sp_authorize_right,如果這個存儲過程授權給Test用戶了話,那麼在目錄試圖sys.database_permissions裡面會有一條記錄,如下所示:

如果我將該存儲過程授予EXEC許可權給TEST1,那麼
GRANT EXEC ON dbo.sp_diskcapacity_cal TO Test;
GRANT EXEC ON dbo.sp_diskcapacity_cal TO Test1;

SELECT * FROM sys.sysusers WHERE name ='Test' OR name ='Test1'

其實grantee_principal_id代表向其授予許可權的資料庫主體 ID ,所以我就能通過上面兩個視圖來判斷存儲過程是否授予執行許可權給用戶Test與否,同理,對於函數也是如此,存儲過程如下所示,其實這個存儲過程還可以擴展,如果您有特殊的需要的話。

復制代碼 代碼如下:

Code Snippet
USE MyAssistant;
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS(SELECT 1 FROM sysobjects WHERE id=OBJECT_ID(N'sp_authorize_right') AND OBJECTPROPERTY(id, 'IsProcere') =1)
DROP PROCEDURE sp_authorize_right;
GO
--=========================================================================================================
-- ProcereName : sp_authorize_right
-- Author : Kerry
-- CreateDate : 2013-05-10
-- Blog : www.cnblogs.com/kerrycode/
-- Description : 將資料庫的所有自定義存儲過程或自定義函數賦權給某個用戶(可以繼續擴展)
/**********************************************************************************************************
Parameter : 參數說明
***********************************************************************************************************
@type : 'P' 代表存儲過程 , 'F' 代表存儲過程,如果需要可以擴展其它對象
@user : 某個用戶賬戶
***********************************************************************************************************
Modified Date Modified User Version Modified Reason
***********************************************************************************************************
2013-05-13 Kerry V01.00.01 排除系統存儲過程和系統函數的授權處理
2013-05-14 Kerry V01.00.02 增加判斷,如果某個存儲過程已經賦予許可權
則不做任何操作
***********************************************************************************************************/
--=========================================================================================================
CREATE PROCEDURE sp_authorize_right
(
@type AS CHAR(10) ,
@user AS VARCHAR(20)
)
AS
DECLARE @sqlTextVARCHAR(1000);
DECLARE @UserId INT;
SELECT @UserId = uid FROM sys.sysusers WHERE name=@user;
IF @type = 'P'
BEGIN
CREATE TABLE #ProcereName( SqlText VARCHAR(max));
INSERT INTO #ProcereName
SELECT 'GRANT EXECUTE ON ' + p.name + ' TO ' + @user + ';'
FROM sys.proceres p
WHERE NOT EXISTS( SELECT 1
FROM sys.database_permissions r
WHERE r.major_id = p.object_id
AND r.grantee_principal_id = @UserId
AND r.permission_name IS NOT NULL )
SELECT * FROM #ProcereName;
--SELECT 'GRANT EXECUTE ON ' + NAME + ' TO ' +@user +';'
--FROM sys.proceres;
--SELECT 'GRANT EXECUTE ON ' + [name] + ' TO ' +@user +';'
-- FROM sys.all_objects
--WHERE [type]='P' OR [type]='X' OR [type]='PC'
DECLARE cr_procere CURSOR FOR
SELECT * FROM #ProcereName;
OPEN cr_procere;
FETCH NEXT FROM cr_procere INTO @sqlText;
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE(@sqlText);
FETCH NEXT FROM cr_procere INTO @sqlText;
END
CLOSE cr_procere;
DEALLOCATE cr_procere;
END
ELSE
IF @type='F'
BEGIN
CREATE TABLE #FunctionSet( functionName VARCHAR(1000));
INSERT INTO #FunctionSet
SELECT 'GRANT EXEC ON ' + name + ' TO ' + @user + ';'
FROM sys.all_objects s
WHERE NOT EXISTS( SELECT 1
FROM sys.database_permissions p
WHERE p.major_id = s.object_id
AND p.grantee_principal_id = @UserId)
AND schema_id = SCHEMA_ID('dbo')
AND( s.[type] = 'FN'
OR s.[type] = 'AF'
OR s.[type] = 'FS'
OR s.[type] = 'FT'
) ;
SELECT * FROM #FunctionSet;
--SELECT 'GRANT EXEC ON ' + name + ' TO ' + @user +';' FROM sys.all_objects
-- WHERE schema_id =schema_id('dbo')
-- AND ([type]='FN' OR [type] ='AF' OR [type]='FS' OR [type]='FT' );
INSERT INTO #FunctionSet
SELECT 'GRANT SELECT ON ' + name + ' TO ' + @user + ';'
FROM sys.all_objects s
WHERE NOT EXISTS( SELECT 1
FROM sys.database_permissions p
WHERE p.major_id = s.object_id
AND p.grantee_principal_id = @UserId)
AND schema_id = SCHEMA_ID('dbo')
AND( s.[type] = 'TF'
OR s.[type] = 'IF'
) ;
SELECT * FROM #FunctionSet;
--SELECT 'GRANT SELECT ON ' + name + ' TO ' + @user +';' FROM sys.all_objects
-- WHERE schema_id =schema_id('dbo')
-- AND ([type]='TF' OR [type]='IF') ;
DECLARE cr_Function CURSOR FOR
SELECT functionName FROM #FunctionSet;
OPEN cr_Function;
FETCH NEXT FROM cr_Function INTO @sqlText;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT(@sqlText);
EXEC(@sqlText);
FETCH NEXT FROM cr_Function INTO @sqlText;
END
CLOSE cr_Function;
DEALLOCATE cr_Function;
END
GO

2. sql中如何用什麼語句給用戶授權

sql語言用grant語句向用戶授予操作許可權,grant語句的一般格式為:
grant
<許可權>[,<許可權>]...
[on
<對象類型>
<對象名>]
to
<用戶>[,<用戶>]...
[with
grant
option];
其語義為:將對指定操作對象的指定操作許可權授予指定的用戶。
不同類型的操作對象有不同的操作許可權,常見的操作許可權如表3-4所示。
表3-4
不同對象類型允許的操作許可權
對象
對象類型
操作許可權
屬性列
table
select,
insert,
update,
delete
all
privieges
視圖
table
select,
insert,
update,
delete
all
privieges
基本表
table
select,
insert,
update,
alter,
index,delete
all
privieges
資料庫
database
createtab
詳細信息…
接受許可權的用戶可以是一個或多個具體用戶,也可以是public即全體用戶。
如果指定了with
grant
option子句,則獲得某種許可權的用戶還可以把這種許可權再授予別的用戶。如果沒有指定with
grant
option子句,則獲得某種許可權的用戶只能使用該許可權,但不能傳播該許可權。
例1
把查詢student表許可權授給用戶u1
grant
select
on
table
student
to
u1;
例2
把對student表和course表的全部許可權授予用戶u2和u3
grant
all
priviliges
on
table
student,
course
to
u2,
u3;
例3
把對表sc的查詢許可權授予所有用戶
grant
select
on
table
sc
to
public;
例4
把查詢student表和修改學生學號的許可權授給用戶u4
詳細信息…
這里實際上要授予u4用戶的是對基本表student的select許可權和對屬性列sno的update許可權。授予關於屬性列的許可權時必須明確指出相應屬性列名。完成本授權操作的sql語句為:
grant
update(sno),
select
on
table
student
to
u4;
例5
把對表sc的insert許可權授予u5用戶,並允許他再將此許可權授予其他用戶
grant
insert
on
table
sc
to
u5
with
grant
option;
詳細信息…
執行此sql語句後,u5不僅擁有了對表sc的insert許可權,還可以傳播此許可權,即由u5用戶發上述grant命令給其他用戶。
例如u5可以將此許可權授予u6:
grant
insert
on
table
sc
to
u6
with
grant
option;
同樣,u6還可以將此許可權授予u7:
grant
insert
on
table
sc
to
u7;
因為u6未給u7傳播的許可權,因此u7不能再傳播此許可權。
例6
dba把在資料庫s_c中建立表的許可權授予用戶u8
grant
createtab
on
database
s_c
to
u8;

3. 如何用SQL語句為指定用戶授權

指定資料庫,需要有所有表查詢許可權和視圖創建許可權use[database]Grantselectto[userName]GRANTCREATEVIEWTO[userName]

4. 跪求sql server怎樣給新建用戶賦許可權

用SQL建用戶和賦許可權

、資料庫操作授權
grant 命令序列 to 用戶名
A. 系統管理員可以授予其他用戶CREATE DATABASE的許可權,使其他用戶可以成為資料庫所有者。
B. 資料庫所有者在他所擁有的資料庫中,可以授予其他用戶的許可權有:
l CREATE TABLE ------------------- 建表
lCREATE DEFAULT ------------------ 建預設
lCREATE RULE ------------------- 建規則
lCREATE PROCere ------------------ 建存儲過程
lCREATE VIEW ------------------- 建視圖
lDUMP DATABASE ------------------- 備份資料庫
lDUMP TRANsaction ------------------ 備份日誌
C. 資料庫對象所有者可以授予其他用戶的操作許可權有:
l SELECT
l UPDATE
l INSERT
l EXECute
l DELETE
l REFERENCE
例:授予a1在資料庫test上建表,建視圖,建存儲過程;對表students有select,reference權;對name,native欄位有update權。
1> use test
2> go
3> grant creat table,create procere ,create view to a1
4> go
5> grant select,reference on students to a1 with grant option
6> go
7> grant update on students(name,native) to a1
8> go
9> sp_helprotect
10> go

5. sql 授權 ALL

用戶1對用戶2授權select並可傳播授權,用戶2對用戶3授權select並可傳播授權,用戶3對用戶1授權select
構成一個循環授權了,這肯定是會出錯誤的了。
授權是可以成功,但是在撤銷授權過程中就會出現錯誤的。

6. 請問如何用SQL語句為指定用戶授權

用SQL語句為指定用戶授權的具體步驟如下:

我們需要准備的材料分別是:電腦、sqlserver2008

1、首先打開sqlserver2008,之後點擊打開左上角的「新建查詢」。