❶ sqlserver中通過函數賦予許可權,為什麼這里出錯了,應該怎麼改
你這什麼亂七八糟的代碼,語法不對不說,使用方法也不對
sp_addrole是把角色賦予某個用戶,例如
sp_addrole 'db_owner','abcd'
把資料庫擁有者角色賦予給abcd用戶。然後你下面那個又是什麼亂七八糟的代碼,
grant select on table to 'abcd'
把表的查詢許可權授予給abcd用戶。
你基本語法都還沒搞清楚。。。。
❷ 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
允許向別人賦予同樣許可權.
❸ 常用的sql函數
--數據操作
2
3 SELECT --從資料庫表中檢索數據行和列
4 INSERT --向資料庫表添加新數據行
5 DELETE --從資料庫表中刪除數據行
6 UPDATE --更新資料庫表中的數據
7
8 --數據定義
9
10 CREATE TABLE --創建一個資料庫表
11 DROP TABLE --從資料庫中刪除表
12 ALTER TABLE --修改資料庫表結構
13 CREATE VIEW --創建一個視圖
14 DROP VIEW --從資料庫中刪除視圖
15 CREATE INDEX --為資料庫表創建一個索引
16 DROP INDEX --從資料庫中刪除索引
17 CREATE PROCEDURE --創建一個存儲過程
18 DROP PROCEDURE --從資料庫中刪除存儲過程
19 CREATE TRIGGER --創建一個觸發器
20 DROP TRIGGER --從資料庫中刪除觸發器
21 CREATE SCHEMA --向資料庫添加一個新模式
22 DROP SCHEMA --從資料庫中刪除一個模式
23 CREATE DOMAIN --創建一個數據值域
24 ALTER DOMAIN --改變域定義
25 DROP DOMAIN --從資料庫中刪除一個域
26
27 --數據控制
28
29 GRANT --授予用戶訪問許可權
30 DENY --拒絕用戶訪問
31 REVOKE --解除用戶訪問許可權
32
33 --事務控制
34
35 COMMIT --結束當前事務
36 ROLLBACK --中止當前事務
37 SET TRANSACTION --定義當前事務數據訪問特徵
38
39 --程序化SQL
40
41 DECLARE --為查詢設定游標
42 EXPLAN --為查詢描述數據訪問計劃
43 OPEN --檢索查詢結果打開一個游標
44 FETCH --檢索一行查詢結果
45 CLOSE --關閉游標
46 PREPARE --為動態執行准備SQL 語句
47 EXECUTE --動態地執行SQL 語句
48 DESCRIBE --描述准備好的查詢
49
50 ---局部變數
51 declare @id varchar(10)
52 --set @id = 'sp'
53 select @id = 'sp'
54
55 ---全局變數
56 ---必須以@@開頭
57 --IF ELSE
58 declare @x int @y int @z int
59 select @x = 1 @y = 2 @z=3
60 if @x > @y
61 print 'x > y' --列印字元串'x > y'
62 else if @y > @z
63 print 'y > z'
64 else print 'z > y'
65 --CASE
66 use pubs
67 update employee
68 set e_wage =
69 case
70 when job_level = 』1』 then e_wage*1.08
71 when job_level = 』2』 then e_wage*1.07
72 when job_level = 』3』 then e_wage*1.06
73 else e_wage*1.05
74 end
75 --WHILE CONTINUE BREAK
76 declare @x int @y int @c int
77 select @x = 1 @y=1
78 while @x < 3
79 begin
80 print @x --列印變數x 的值
81 while @y < 3
82 begin
83 select @c = 100*@x + @y
84 print @c --列印變數c 的值
85 select @y = @y + 1
86 end
87 select @x = @x + 1
88 select @y = 1
89 end
90 --WAITFOR
91
92 --例 等待1 小時2 分零3 秒後才執行SELECT 語句
93
94 waitfor delay 』01:02:03』
95 select * from employee
96
97 --例 等到晚上11 點零8 分後才執行SELECT 語句
98
99 waitfor time 』23:08:00』
100
101
102SELECT
103
104 select *(列名) from table_name(表名) where column_name operator value ex宿主)
105 select * from stock_information where stockid = str(nid)
106 stockname = 'str_name'
107 stockname like '% find that %'
108 stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)
109 stockname like '[^F-M]%' --------- (^排除指定范圍)
110 --------- 只能在使用like關鍵字的where子句中使用通配符)
111 or stockpath = 'path'
112 or stocknumber < 1000
113 and stockindex = 24
114 not stocksex = 'man'
115 stocknumber between 20 and 100
116 stocknumber in(10,20,30)
117 order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
118 order by 1,2 --------- by列號
119 stockname = (select stockname from stock_information where stockid = 4)
120 --------- 子查詢
121 --------- 除非能確保內層select只返回一個行的值
122 --------- 否則應在外層where子句中用一個in限定符
123 select distinct column_name form table_name
124 --------- distinct指定檢索獨有的列值,不重復
125 select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
126 select stockname , "stocknumber" = count(*) from table_name group by stockname
127 --------- group by 將表按行分組,指定列中有相同的值
128 having count(*) = 2 --------- having選定指定的組
129
130 select *
131 from table1, table2
132where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
133 table1.id =* table2.id -------- 右外部連接
134 select stockname from table1
135 union [all] -------- union合並查詢結果集,all-保留重復行
136 select stockname from table2
137
138 insert
139
140 insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx"
141 value (select Stockname , Stocknumber from Stock_table2)
142 -------value為select語句
143
144 update
145
146 update table_name set Stockname = "xxx" [where Stockid = 3]
147 Stockname = default
148 Stockname = null
149 Stocknumber = Stockname + 4
150
151 delete
152
153 delete from table_name where Stockid = 3
154 truncate table 表名 --------- 刪除表中所有行,仍保持表的完整性
155 drop table table_name --------- 完全刪除表
156
157 alter table -------- 修改資料庫表結構
158
159 alter table database.owner.table_name add column_name char(2) null ..
160 sp_help 表名 -------- 顯示表已有特徵
161 create table table_name (name char(20), age smallint, lname varchar(30))
162 insert into table_name select -------- 實現刪除列的方法(創建新表)
163 alter table table_name drop constraint Stockname_default
164 --------- 刪除Stockname的default約束
165
166
167常用函數(function)
168轉換函數
169convert(數據類型,值,格式)
170
171 統計函數
172
173 AVG --求平均值
174 COUNT --統計數目
175 MAX --求最大值
176 MIN --求最小值
177 SUM --求和
178 STDEV()
179
180 --STDEV()函數返回表達式中所有數據的標准差
181 --STDEVP()
182 --STDEVP()函數返回總體標准差
183
184 VAR()
185
186 --VAR()函數返回表達式中所有值的統計變異數
187
188 VARP()
189
190 --VARP()函數返回總體變異數
191
192 算術函數
193
194 三角函數
195
196 SIN(float_expression) --返回以弧度表示的角的正弦
197 COS(float_expression) --返回以弧度表示的角的餘弦
198 TAN(float_expression) --返回以弧度表示的角的正切
199 COT(float_expression) --返回以弧度表示的角的餘切
200
201 反三角函數
202
203 ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
204 ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
205 ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
206 ATAN2(float_expression1,float_expression2)
207 ------返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
208 DEGREES(numeric_expression)
209 ------把弧度轉換為角度返回與表達式相同的數據類型可為
210 ------INTEGER/MONEY/REAL/FLOAT 類型
211 RADIANS(numeric_expression)
212------把角度轉換為弧度返回與表達式相同的數據類型可為
213
214 ------INTEGER/MONEY/REAL/FLOAT 類型
215 EXP(float_expression) --返回表達式的指數值
216 LOG(float_expression) --返回表達式的自然對數值
217 LOG10(float_expression)--返回表達式的以10 為底的對數值
218 SQRT(float_expression) --返回表達式的平方根
219
220 取近似值函數
221
222 CEILING(numeric_expression)
223-------返回>=表達式的最大整數返回的數據類型與表達式相同可為
224 -------INTEGER/MONEY/REAL/FLOAT 類型
225 FLOOR(numeric_expression)
226-------返回<=表達式的最小整數返回的數據類型與表達式相同可為
227 -------INTEGER/MONEY/REAL/FLOAT 類型
228 ROUND(numeric_expression)
229-------返回以integer_expression 為精度的四捨五入值返回的數據
230 -------類型與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
231 ABS(numeric_expression)
232-------返回表達式的絕對值返回的數據類型與表達式相同可為
233 -------INTEGER/MONEY/REAL/FLOAT 類型
234 SIGN(numeric_expression)
235-------測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
236 -------與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
237 PI() -------返回值為π 即3.1415926535897936
238 RAND([integer_expression])
239-------用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
240字元串函數
241
242 ASCII() ------函數返回字元表達式最左端字元的ASCII 碼值
243 CHAR() ------函數用於將ASCII 碼轉換為字元
244 ------如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
245 LOWER() ------函數把字元串全部轉換為小寫
246 UPPER() ------函數把字元串全部轉換為大寫
247 STR() ------函數把數值型數據轉換為字元型數據
248 LTRIM() ------函數把字元串頭部的空格去掉
249 RTRIM() ------函數把字元串尾部的空格去掉
250 LEFT(),RIGHT(),SUBSTRING() --函數返回部分字元串
251 CHARINDEX(),PATINDEX() --函數返回字元串中某個指定的子串出現的開始位置
252 SOUNDEX() ------函數返回一個四位字元碼
253 ------SOUNDEX函數可用來查找聲音相似的字元串但SOUNDEX函數對數字和漢字均只返回0 值
254 DIFFERENCE() ------函數返回由SOUNDEX 函數返回的兩個字元表達式的值的差異
255 ------0 兩個SOUNDEX 函數返回值的第一個字元不同
256 ------1 兩個SOUNDEX 函數返回值的第一個字元相同
257 ------2 兩個SOUNDEX 函數返回值的第一二個字元相同
258 ------3 兩個SOUNDEX 函數返回值的第一二三個字元相同
259 ------4 兩個SOUNDEX 函數返回值完全相同同
260 QUOTENAME() ------函數返回被特定字元括起來的字元串
261
262 /**//**//**//*select quotename('abc', '{') quotename('abc')
263 運行結果如下
264
265 {
266 {abc} [abc]*/
267 REPLICATE() ------函數返回一個重復character_expression 指定次數的字元串
268 /**//**//**//*select replicate('abc', 3) replicate( 'abc', -2)
269
270 運行結果如下
271
272 abcabcabc NULL*/
273 REVERSE() ------函數將指定的字元串的字元排列順序顛倒
274 REPLACE() ------函數返回被替換了指定子串的字元串
275 /**//**//**//*select replace('abc123g', '123', 'def')
276
277 運行結果如下
278
279 abcdefg*/
280
281 SPACE() ------函數返回一個有指定長度的空白字元串
282 STUFF() ------函數用另一子串替換字元串指定位置長度的子串
283
284 數據類型轉換函數
285
286 CAST() 函數語法如下
287 CAST() ( AS [ length ])
288 CONVERT() 函數語法如下
289 CONVERT() ([ length ], [, style])
290 select cast(100+99 as char) convert(varchar(12), getdate())
291
292 運行結果如下
293 199 Jan 15 2000
294
295 日期函數
296
297 DAY() ------函數返回date_expression 中的日期值
298 MONTH() ------函數返回date_expression 中的月份值
299 YEAR() ------函數返回date_expression 中的年份值
300 DATEADD( , ,)
301 -----函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
302 DATEDIFF( , ,)
303 -----函數返回兩個指定日期在datepart 方面的不同之處
304
305 DATENAME( , ------函數以字元串的形式返回日期的指定部分
306 DATEPART( , ------函數以整數值的形式返回日期的指定部分
307 GETDATE() ------函數以DATETIME 的預設格式返回系統當前的日期和時間
308
309 系統函數
310
311 APP_NAME() ------函數返回當前執行的應用程序的名稱
312 COALESCE() -----函數返回眾多表達式中第一個非NULL 表達式的值
313 COL_LENGTH(<'table_name'>, <'column_name'> ----函數返回表中指定欄位的長度值
314 COL_NAME(, ----函數返回表中指定欄位的名稱即列名
315 DATALENGTH() -----函數返回數據表達式的數據的實際長度
316 DB_ID(['database_name']) ------函數返回資料庫的編號
317 DB_NAME(database_id) ------函數返回資料庫的名稱
318 HOST_ID() -----函數返回伺服器端計算機的名稱
319 HOST_NAME() -----函數返回伺服器端計算機的名稱
320 IDENTITY([, seed increment]) [AS column_name])
321 --IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
322 /**//**//**//*select identity(int, 1, 1) as column_name
323 into newtable
324 from oldtable*/
325
326 ISDATE() ----函數判斷所給定的表達式是否為合理日期
327 ISNULL(, --函數將表達式中的NULL 值用指定值替換
328 ISNUMERIC() ----函數判斷所給定的表達式是否為合理的數值
329 NEWID() ----函數返回一個UNIQUEIDENTIFIER 類型的數值
330 NULLIF(,
331 ----NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回xpression1 的值
❹ 請問如何用SQL語句為指定用戶授權
用SQL語句為指定用戶授權的具體步驟如下:
我們需要准備的材料分別是:電腦、sqlserver2008
1、首先打開sqlserver2008,之後點擊打開左上角的「新建查詢」。
❺ 如何用SQL語句為指定用戶授權
指定資料庫,需要有所有表查詢許可權和視圖創建許可權use[database]Grantselectto[userName]GRANTCREATEVIEWTO[userName]
❻ 請用SQL的GRANT語句完成以下授權定義。
你問出這個問題,明顯你就沒有認真的學習SQL語言!如果想真正的學好的話建議你去多看下書了!
下面給你具體的回答:
必須確定授權用戶具有對X表Y列的SELECT許可權和對SELECT的
GRANT SELECT(Y) on X to A; 這樣你就可以執行A用戶在X表裡對Y值的任意查詢.
如果在語句後面在跟上的話WITH GRANT OPTION那麼用戶A可以將自己的這個許可權繼續授權給其他用戶.
❼ 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
❽ mssql 內聯函數 給什麼許可權
sql server 用戶訪問許可權設置:
/*--示例說明 示例
在資料庫pubs中創建一個擁有表jobs的所有許可權、擁有表titles的SELECT許可權的角色r_test ,隨後創建了一個登錄l_test,然後在資料庫pubs中為登錄l_test創建了用戶賬戶u_test, 同時將用戶賬戶u_test添加到角色r_test中,使其通過許可權繼承獲取了與角色r_test一樣的許可權, 最後使用DENY語句拒絕了用戶賬戶u_test對表titles的SELECT許可權。 經過這樣的處理,使用l_test登錄SQL Server實例後,它只具有表jobs的所有許可權。
--*/ USE pubs --
創建角色 r_test : EXEC sp_addrole r_test --
授予 r_test 對 jobs 表的所有許可權 :GRANT ALL ON jobs TO r_test --
授予角色 r_test 對 titles 表的 SELECT 許可權: GRANT SELECT ON titles TO r_test --
添加登錄 l_test,設置密碼為pwd,默認資料庫為pubs : EXEC sp_addlogin l_test,pwd,pubs --
為登錄 l_test 在資料庫 pubs 中添加安全賬戶 u_test : EXEC sp_grantdbaccess l_test,u_test --
添加 u_test 為角色 r_test 的成員: EXEC sp_addrolemember r_test,u_test --
-----------------------------補充-------------- --
上面的授權為對單表進行授權,2005可對SCHEMA級別進行授權 ,
授予安全賬戶 u_test,架構interface下的查詢許可權: GRANT SELECT ON SCHEMA::interface TO u_test --
拒絕安全賬戶 u_test,架構dbo下的許可權: DENY VIEW DEFINITION ON SCHEMA::dbo TO risk --
拒絕安全賬戶 u_test 對 titles 表的 SELECT 許可權: DENY SELECT ON titles TO u_test /*--
完成上述步驟後,用 l_test 登錄,可以對jobs表進行所有操作,但無法對titles表查詢,雖然角色 r_test 有titles表的select許可權,但已經在安全賬戶中明確拒絕了對titles的select許可權,所以l_test無titles表的select 許可權。--*/ --
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
從資料庫 pubs 中刪除安全賬戶: EXEC sp_revokedbaccess u_test --
刪除登錄 l_test: EXEC sp_droplogin l_test --
刪除角色 r_test: EXEC sp_droprole r_test exec sp_dropsrvrolemember Naa, sysadmin go exec sp_addsrvrolemember Naa, securityadmin go --
作好SQL的安全管理,首先做好用戶安全,簡單的,只允許sql的用戶訪問sql(防止利用administrator組用戶訪問)
1、企業管理器--右鍵SQL實例--屬性--安全性--身份驗證--選擇"sql server和windows"--確定 2、企業管理器--安全性--登陸--右鍵sa--設置密碼--其他用戶也設置密碼 3、刪除用戶: BUILTINAdministrators Administrator --這個用戶不一定有 這樣可以防止用windows身份登陸SQL 4、設置進入企業管理器需要輸入密碼:在企業管理器中 --右鍵你的伺服器實例(就是那個有綠色圖標的) --編輯SQL Server注冊屬性 --選擇"使用 SQL Server 身份驗證" --並勾選"總是提示輸入登錄名和密碼" --確定 --經過上面的設置,你的SQL Server基本上算是安全了。
其次,改默認埠隱藏伺服器,減少被攻擊的可能性 SQL Server伺服器: --開始 --程序 --Microsoft SQL Server --伺服器網路實用工具 --啟用的協議中"TCP/IP" --屬性 --默認埠,輸入一個自已定義的埠,比如2433 --勾選隱藏伺服器
管好sql的用戶,,防止訪問他不該訪問的資料庫(總控制,明細還可以控制他對於某個資料庫的具體對象具有的許可權) ---切換到你新增的用戶要控制的資料庫: use 你的庫名 go ----新增用戶: exec sp_addlogin test ----添加登錄: exec sp_grantdbaccess Ntest ----使其成為當前資料庫的合法用戶: exec sp_addrolemember Ndb_owner, Ntest ----授予對自己資料庫的所有許可權 -----這樣創建的用戶就只能訪問自己的資料庫。及資料庫中包含了guest用戶的公共表 go ----刪除測試用戶: exec sp_revokedbaccess Ntest ----移除對資料庫的訪問許可權: exec sp_droplogin Ntest ----刪除登錄: 如果在企業管理器中創建的話,就用,企業管理器--安全性--右鍵登錄--新建登錄 常規項--名稱中輸入用戶名 --身份驗證方式根據你的需要選擇(如果是使用windows身份驗證,則要先在操作系統的用戶中新建用戶) --默認設置中,選擇你新建的用戶要訪問的資料庫名、 伺服器角色項 這個裡面不要選擇任何東西, 資料庫訪問項 勾選你創建的用戶需要訪問的資料庫名, 資料庫角色中允許,勾選"public","db_ownew" 確定,這樣建好的用戶與上面語句建立的用戶一樣。
最後一步,為具體的用戶設置具體的訪問許可權,這個可以參考下面的最簡示例:
--添加只允許訪問指定表的用戶: exec sp_addlogin 用戶名,密碼,默認資料庫名 -----添加到資料庫: exec sp_grantdbaccess 用戶名 ----分配整表許可權: GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用戶名] -----分配許可權到具體的列: GRANT SELECT , UPDATE ON table1(id,AA) TO [用戶名]
❾ mysql 自定義函數的授權
調用如:select 函數名(參數列表)。 mysql中的UDF(自定義函數),可以寫好一些方法或 函數,然後進行調用,而且是在SQL語句中可以進行調用。 DROP FUNCTION CalculateAmount CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2) BEGIN DECLARE totalCredits FLOAT; SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid; RETURN totalAmount; END 要注意的是,在UDF中,不要定義與數據表中重名的列。而在SQL中, 則可以像SELECT CalculateAmount(1);那樣去調用了。