If R(u,v)

If we have a parametrization R(u,v), then D[R,u] is a tangent vector to a curve with v some constant. Also, D[R,v] is a tangent vector to a curve with u some constant. These are both in the tangent plane.
The normal vector is then given by the cross product of these two vectors!


  Clear[R,u,v]
  R[u_,v_]:={2 Cos[u] Sin[v],2 Sin[u] Sin[v], 2 Cos[v]}


  nv=Cross[D[R[u,v],u],D[R[u,v],v]]
  Simplify[nv]

Let's look at the point where u=v=Pi/4.


  normalv=vectorPlot[{R[Pi/4,Pi/4]},{R[Pi/4,Pi/4]+nv/.{u->Pi/4,v->Pi/4}}];

Oops! This normal vector will point inside the sphere. Let's use the opposite one.


  normalv=vectorPlot[{R[Pi/4,Pi/4]},{R[Pi/4,Pi/4]-nv/.{u->Pi/4,v->Pi/4}}];


  Show[sph,normalv];


  tp=ContourPlot3D[({x,y,z}-R[Pi/4,Pi/4]).(-nv/.{u->Pi/4,v->Pi/4}),
  {x,-2,2},{y,-2,2},{z,-2,2}];


  Show[sph,normalv,tp];

Another option for the normal plane would be to use the formulation
n1(x-x0)+n2(y-y0)+n3(z-z0)=0.
Then you could use z=[-n1(x-x0)-n2(y-y0)+n3z0]/n3
and then use Plot 3D


  n1=(nv/.{u->Pi/4,v->Pi/4})[[1]]
  n2=(nv/.{u->Pi/4,v->Pi/4})[[2]]
  n3=(nv/.{u->Pi/4,v->Pi/4})[[3]]
  x0=R[Pi/4,Pi/4][[1]]
  y0=R[Pi/4,Pi/4][[2]]
  z0=R[Pi/4,Pi/4][[3]]


  tp2=Plot3D[(-n1(x-x0)-n2(y-y0)+n3 z0)/n3,{x,-2,2},{y,-2,2}];


  Show[sph,normalv,tp2];

Up to Tangent Planes