日期:2014-05-17  浏览次数:20562 次

create table 权限问题
如何设置账户具有create table权限又同时无drop table权限呢??

------解决方案--------------------
有创建表Create table权限,隐含Alter。
楼主 的需求只能通过DB 触发器控制 
go--举个例子

USE [master]
GO
CREATE LOGIN [Roy] WITH PASSWORD=N'1', DEFAULT_DATABASE=[Test], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [Test]
GO
CREATE USER [Roy] FOR LOGIN [Roy]
GO
USE [Test]
GO
/****** 物件:  Schema [Roy]    指令码日期: 08/19/2011 09:46:15 ******/
CREATE SCHEMA [Roy] AUTHORIZATION [Roy]
go
use [Test]
GO
GRANT CREATE TABLE TO [Roy]
GO




CREATE TRIGGER tr_DBDropTable ON DATABASE 
FOR  DROP_TABLE,ALTER_TABLE
AS
IF  ORIGINAL_LOGIN()='Roy'
BEGIN 
PRINT '没权限执行  DROP TABLE'
ROLLBACK 
end


GO

--以下测试,用登陆用户Roy

go
CREATE TABLE Roy.Roy(ID int)
GO
SELECT SUSER_NAME(), USER_NAME();

DROP TABLE Roy.Roy
/*
没权限执行  DROP TABLE
讯息 3609,层级 16,状态 2,行 2
交易在触发程序中结束。已中止批次。
*/

------解决方案--------------------

USE [dbname]
GO
CREATE ROLE [createtable] AUTHORIZATION [dbo.]  --创建数据库角色
GO
use [dbname]
GO
GRANT CREATE TABLE TO [createtable]  --给角色赋予建表权限
GO
USE [dbname]
GO
EXEC sp_addrolemember N'createtable', N'loginname'  --给登录名赋予创建的角色
GO

------解决方案--------------------
权限没怎么研究过,但是我认为不外乎两类:1、全部没显式定义的就deny,2、用的时候查询是否有某某权限,只允许那些权限操作。

不过也有可能混合两种来判断。

怎么就你这个贴我回复不了啊