当前位置:首页 » 编程语言 » 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,之后点击打开左上角的“新建查询”。