两个关于T-sql语言的问题

raohui5 2009-09-14 10:42:05
1。
如果 我写了个函数 想绑定到某字段上
但不能用可视化绑定 用sql语言绑定 应该怎么做?

函数是fn_GetDepth() 想绑定到Depth字段上 该函数的参数是该表的另一个字段ID

注意,重点是用 T-sql语言,不能用可视化操作。

2.
重点:不能用可视化操作,全部用T-sql语言编写
比如我创建了个数据库AAA
现在想创建一个SQL Server验证的登录名AD,这个登录名只能执行该数据库里已有的存储过程(重点)

就是说 用户,角色,权限,这些东西该怎么配 全部用T-sql语言写好

跪求各位大侠啦
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
raohui5 2009-09-15
  • 打赏
  • 举报
回复
顶 求人
第二个OK了 第一个啊
soft_wsx 2009-09-15
  • 打赏
  • 举报
回复
要求好多!
raohui5 2009-09-14
  • 打赏
  • 举报
回复
第一个问题的表结构和函数 因为函数里用到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,
Remark 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


raohui5 2009-09-14
  • 打赏
  • 举报
回复
补充
1.我的Depth字段已经存在 能不能在不添加的情况下绑定
2.我希望user对所有存储过程都能执行,而不是逐个授权
麻烦大家了
guguda2008 2009-09-14
  • 打赏
  • 举报
回复
学习
-狙击手- 2009-09-14
  • 打赏
  • 举报
回复


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'
jinjazz 2009-09-14
  • 打赏
  • 举报
回复
create database aa
go
use aa
go
create login ad with password ='ad'
go
create user ad for login ad
go

create proc p_test
as
select getdate()
go

grant execute on p_test to ad

jinjazz 2009-09-14
  • 打赏
  • 举报
回复
alter table test add Depth as dbo.fn_GetDepth(ID )

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧