登录用户需要可以创建、修改、删除表,但对非自己创建的表,仅可查询。不知权限如何设定,请各位帮忙看看。

解决方案 »

  1.   

    use [Test]
    GO
    GRANT SELECT TO [角色]
    GO
      

  2.   


    测试了一下,可以通过。 具体的过程不是很明白,还请roy点拨一下。 
      

  3.   


    創建角色,有select /create table--針對DB的
    給用戶或角色指定個結構描述就行了
      

  4.   

    剛測了個例子給樓主參照,按自己情況更改/*
    創建角色
    */
    USE [Test]
    GO
    CREATE ROLE [AppSelectRole]
    GO
    use [Test]
    GO
    GRANT SELECT TO [AppSelectRole]
    GO
    GRANT CREATE TABLE TO [AppSelectRole]
    GO
    USE [Test]
    GO
    CREATE SCHEMA [UserTest] AUTHORIZATION [AppSelectRole]
    GO/*
    創建登陸用戶
    */
    USE [master]
    GO
    CREATE LOGIN [TestUser] WITH PASSWORD=N'1', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    GO
    USE [Test]
    GO
    CREATE USER [TestUser] FOR LOGIN [TestUser]
    GO
    USE [Test]
    GO
    EXEC sp_addrolemember N'AppSelectRole', N'TestUser'
    GO/*
    測試
    */
    USE Test
    GO
    EXECUTE AS LOGIN='TestUser'
    GO
    CREATE TABLE userTest.t2(ID int) --OK
    go
    DROP TABLE userTest.t2 --OK
    go
    SELECT * FROM dbo.t --OK
    go
    DROP TABLE dbo.t --Error
    /*
    訊息 3701,層級 14,狀態 20,行 1
    無法 卸除 資料表 'T',因為它不存在或您沒有權限。*/
    GO
    REVERT
      

  5.   


    感谢roy_88的测试,我这边之前通过的也是异架构的情况。同架构不知道可以实现不?应用环境: 
    开发人员临时性需要创建表到实际发布的数据库中,测试通过后,需要删除这些对应的表。 
    但不能删除之前已经存在的表,防止删除错误情况。 (主要对应开发使用)
      

  6.   


    方法很多,这里建议如果是你这样的情况你可以使用SCHEMA,SCHEMA在这里的优势显而易见,而且是2005,2008上推荐使用的方法,有多少个用户可以有多少个SCHMEA,通过它来对每个用户的表进行管理
      

  7.   


    确实在使用中之前考虑了schema的方式,可惜前台程序都写得是dbo下的代码引用。 
    头痛啊....
      

  8.   


    说时候,如果前台是用DBO写死的话,那如果对每个用户单独来管理表的权限,恕我直言,做梦
    SQL SERVER 如果基本是对数据库的权限做处理,对表目前也只有SCHEMA,别无他法,另外LZ,有的时候任务是可以被处理的,有的不可以,无论是DBA 或 DEVELOPER, 我们对不可能的
    任务应该有一个该持有的态度,当然也要说明为什么他不可能被做。祝你好运
      

  9.   


    是啊! 类似这样的话,不知我们这边跟上面的Boss沟通过多少遍,可惜过去到开发,直接被打回。 
    我也希望我们boss也这么强硬。 可事情压下来,还是得想办法不是。呵呵,说起来真是恼火的很...回来继续说问题。这个问题,其实我也想了,如果不基于schema来做处理的话,直接对现有对象进行逐一限制也是可以的。不知道还有别的好的解决办法没有,另外,不知道在Oracle上有没有对应此问题的解决办法。
      

  10.   

    哎理解万岁,那你的那个按照用户来逐个GRANT的方法也是没有办法的办法了,不过注意如果人多
    容易出错,oracle里面基本上一个用户是一个SCHEMA,这点和SQL SERVER 有点区别,所以ORACLE
    是不会出现这样的问题,因为在建立用户的时候就已经强制SCHEMA。
      

  11.   

    1 查询目录视图批量生成grant的语句
    2 写个DDL触发器,自动grant新创建的表
      

  12.   

    没问题啊,不就多grant几次么 
      

  13.   

    引用 1 楼 roy_88 的回复:use [Test]
    GO
    GRANT SELECT TO [角色]
    GO测试了一下,可以通过。 具体的过程不是很明白,还请roy点拨一下。  
      

  14.   

    本帖最后由 roy_88 于 2011-03-01 01:30:42 编辑
      

  15.   


    非常感谢roy_88的帮助!
    结贴了...
      

  16.   

    加个操作员ID:OPERATORID,判断一下就可以了。
      

  17.   

    use [Test]
    GO
    GRANT SELECT TO [角色]
    GO
      

  18.   

    对数据库这块还很茫然,楼主的帖子很好,roy的回答也很棒,向牛人们学习!