proc make_acl {} {

	global base aclf actf

#	select p.protecttype, b.name, a.name, user_name(p.uid) from dbo.sysprotects p, 
#       master.dbo.spt_values a, master.dbo.spt_values b where a.type = "T" and 
#       a.number = p.action and b.type = "T" and b.number = p.protecttype and 
#       p.uid between 0 and 32767 and p.id = 0 
#
#	select p.protecttype, NULL, a.name, user_name(p.uid) from dbo.sysprotects p, 
#       master.dbo.spt_values a where a.type = "T" and a.number = p.action and 
#       p.uid between 0 and 32767 and p.id = 0 order by user_name(p.uid),  a.name
#
#
#	couldn't get this to work so I simplified it (below)
# select p.protecttype, type =b.name, action = a.name, grantee = user_name(p.uid), 
# p.uid,  p.id, owner = user_name(o.uid),  object = o.name, p.columns , 
# preced = 10 into #makeperms from sysprotects p, sysobjects o, 
# master.dbo.spt_values b, master.dbo.spt_values a where 
# o.id = p.id and a.type = "T" and a.number = p.action and b.type = "T" and  
# b.number = p.protecttype and p.uid between 0 and 32767 and 
# o.type in ("U","V","P") group by o.id

#	according to the manuals, protecttype 0 is "grant with grant" --
#	which makes no sense to me.  1 is grant, 2 is revoke.

	set op(0) ???
	set op(1) grant
	set op(2) revoke
	set prep(0) ???
	set prep(1) to
	set prep(2) from

	set sqlcmd "select o.name, a.name, p.protecttype, user_name(p.uid),        
        p.uid,  p.id, user_name(o.uid), p.columns  from 
	sysprotects p, sysobjects o, master.dbo.spt_values a where 
        o.id =* p.id  and a.number = p.action and a.type = 'T' 
        and o.type in ('U','V','P') order by o.name, user_name(p.uid)"
	set sqt "sysprotects sysobjects spt_values"

	doSQL 1

	while {1} {
		set line [sybNext 1]
		if {$line == ""} {break}
		lassign $line onam pnam ptyp unam uid pid own col
		if {$pid} {
		puts $aclf "$op($ptyp) $pnam on $onam $prep($ptyp) $unam\n\go"
		} else {
		puts $actf "$op($ptyp) $pnam $prep($ptyp) $unam\n\go"
		}
	}
	
	return acl

}
	
