检查SCHEMA的ALTER权限

时间:2014-07-23 09:35:37

标签: sql sql-server sql-server-2008

也许我有一个愚蠢的问题 - 不要问我为什么需要它,但仍然...... 我正在使用SQL Server 2008 R2。

我授予了用户对“dbo”的批评权限。 SCHEMA:

USE MyDatabase
GO
GRANT ALTER ON SCHEMA::dbo TO [Some\User];
GO

现在我已经与该用户连接到数据库并尝试检查此权限:

USE MyDatabase
SELECT HAS_PERMS_BY_NAME('dbo', 'SCHEMA', 'ALTER');
GO

没关系,它说" 1" - 这意味着设置权限。 现在的问题是: 是否可以在HAS_PERMS_BY_NAME的参数本身中以某种方式指定数据库名称,并删除语句" USE MyDatabase"在权限检查之前?有这样的事情:

SELECT HAS_PERMS_BY_NAME('MyDatabase.dbo', 'SCHEMA', 'ALTER');

(实际上不起作用)

1 个答案:

答案 0 :(得分:0)

另一种说出问题的方法是找出[Some \ User]是否可以在架构dbo中创建过程或表,可以写成:

SELECT HAS_PERMS_BY_NAME('MyDatabase', 'DATABASE', 'CREATE PROCEDURE')
& HAS_PERMS_BY_NAME('dbo', 'SCHEMA', 'ALTER') AS _can_create_procs,
HAS_PERMS_BY_NAME('MyDatabase', 'DATABASE', 'CREATE TABLE') &
HAS_PERMS_BY_NAME('dbo', 'SCHEMA', 'ALTER') AS _can_create_tables;

有关详情,请参阅此处.. http://msdn.microsoft.com/en-us/library/ms189802(v=sql.100).aspx