1。
如果 我写了个函数  想绑定到某字段上  
但不能用可视化绑定  用sql语言绑定  应该怎么做?函数是fn_GetDepth()  想绑定到Depth字段上  该函数的参数是该表的另一个字段ID注意,重点是用 T-sql语言,不能用可视化操作。 2.
重点:不能用可视化操作,全部用T-sql语言编写
比如我创建了个数据库AAA
现在想创建一个SQL Server验证的登录名AD,这个登录名只能执行该数据库里已有的存储过程(重点)就是说 用户,角色,权限,这些东西该怎么配 全部用T-sql语言写好跪求各位大侠啦

解决方案 »

  1.   

    alter table test add Depth as dbo.fn_GetDepth(ID )
      

  2.   

    create database aa
    go
    use aa
    go
    create login ad with password ='ad'
    go
    create user ad for login ad
    gocreate proc p_test
    as
    select getdate()
    gogrant execute on p_test to ad 
      

  3.   

     CREATE DEFAULT test AS  fn_GetDepth()  sp_bindefault test, 'authors.phone'
    2\
    create database aaa
    go
    use aaa
    go
    --创建角色 r_test
    EXEC sp_addrole 'r_test'--授予 r_test 对 jobs 表的所有权限
    GRANT ALL ON jobs TO r_test
    --授予角色 r_test 对 titles 表的 SELECT 权限
    GRANT SELECT ON titles TO r_test--添加登录 l_test,设置密码为pwd,默认数据库为pubs
    EXEC sp_addlogin 'l_test','pwd','pubs'--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
    EXEC sp_grantdbaccess 'l_test','u_test'--添加 u_test 为角色 r_test 的成员
    EXEC sp_addrolemember 'r_test','u_test'--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
    DENY SELECT ON titles TO u_test/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/--从数据库 pubs 中删除安全账户
    EXEC sp_revokedbaccess 'u_test'--删除登录 l_test
    EXEC sp_droplogin 'l_test'--删除角色 r_test
    EXEC sp_droprole 'r_test'
      

  4.   

    补充
    1.我的Depth字段已经存在 能不能在不添加的情况下绑定
    2.我希望user对所有存储过程都能执行,而不是逐个授权
    麻烦大家了
      

  5.   

    第一个问题的表结构和函数 因为函数里用到Depth字段 所以是在Depth字段存在的情况下的
    所以1楼的方法不能用
     CREATE TABLE Organization
    (
    OrgID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(50) NOT NULL UNIQUE,
    ParentID INT NOT NULL,
    Depth  INT NOT NULL,
    Re nvarchar(200),
    InsertOn DATETIME DEFAULT GETDATE() NOT NULL,
    UpdateOn DATETIME DEFAULT NULL,
    IsValid BIT DEFAULT '1' NOT NULL
    )
    GO/****** 对象:  Table [dbo].[Organization]    脚本日期: 09/10/2009 15:40:14 **
    任务:Depth字段的获取函数
    作者:
    ****************************************************************************/ 
    CREATE FUNCTION fn_GetDepth
    (
    @OrgID INT --节点ID
    )
    RETURNS INT
    AS
    BEGIN
    DECLARE @Depth INT
    DECLARE @ParentID INT
    SELECT  @ParentID = ParentID FROM Organization WHERE OrgID = @OrgID

    --判断是否存在为根节点
    IF @ParentID = 0
    SET @Depth = 1
    ELSE
    SELECT @Depth = Depth+1 FROM dbo.Organization WHERE OrgID=@ParentID
    RETURN @Depth
    END
    GO