日期:2014-05-18  浏览次数:20467 次

问个修改数据库用户权限的问题
我这里有个数据库用户,需要给的权限是db_datareader+db_datawriter,但是在这个基础上要拒绝所有对象的delete权限,请问能不能通过脚本来一次性的更改这个权限,因为有300多个表,如果通过企业管理器修改的话太累了。

------解决方案--------------------
联机丛书中的示例:

A. 授予语句权限
下面的示例给用户 Mary 和 John 以及 Windows NT 组 Corporate\BobJ 授予多个语句权限。

GRANT CREATE DATABASE, CREATE TABLE
TO Mary, John, [Corporate\BobJ]

B. 在权限层次中授予对象权限
下例显示权限的优先顺序。首先,给 public 角色授予 SELECT 权限。然后,将特定的权限授予用户 Mary、John 和 Tom。于是这些用户就有了对 authors 表的所有权限。

USE pubs
GO

GRANT SELECT
ON authors
TO public
GO 

GRANT INSERT, UPDATE, DELETE
ON authors
TO Mary, John, Tom
GO

C. 给 SQL Server 角色授予权限
下面的示例将 CREATE TABLE 权限授予 Accounting 角色的所有成员。

GRANT CREATE TABLE TO Accounting

D. 用 AS 选项授予权限
用户 Jean 拥有表 Plan_Data。Jean 将表 Plan_Data 的 SELECT 权限授予 Accounting 角色(指定 WITH GRANT OPTION 子句)。用户 Jill 是 Accounting 的成员,他要将表 Plan_Data 上的 SELECT 权限授予用户 Jack,Jack 不是 Accounting 的成员。

因为对表 Plan_Data 用 GRANT 语句授予其他用户 SELECT 权限的权限是授予 Accounting 角色而不是显式地授予 Jill,不能因为已授予 Accounting 角色中成员该权限,而使 Jill 能够授予表的权限。Jill 必须用 AS 子句来获得 Accounting 角色的授予权限。

/* User Jean */
GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION

/* User Jill */
GRANT SELECT ON Plan_Data TO Jack AS Accounting